CakePHP3를 문서 루트 외부에 설치

8304 단어 PHPCakePHPcakephp3
요전날, 처음으로 CakePHP3 설치 하는 기사를 투고했습니다.
CakePHP3 설치 자체는 Composer 을 사용하면 쉽게 설치할 수 있다는 것을 알았습니다.
다만, 문서 루트 내에 인스톨한 것만으로, CakePHP3 의 프로그램군을 문서 루트내에 두는 것은 그다지 바람직하지 않다. .
그래서 이번에는 CakePHP3를 문서 루트 밖에 설치하고 개발 · 운용할 수 있도록 설치하고 싶습니다.
※ 이 기사에서의 CakePHP3 의 인스톨 방법에서는, 2017년 2월 4일 시점에서 인스톨 되는 CakePHP3 의 버젼은 3.3.13 이었으므로, CakePHP 3.3.13 을 바탕으로 기사를 작성하고 있습니다. 버전의 차이에 따라 설정 방법 등이 변경될 수 있습니다.

서버 환경


  • CentOS 7.2
  • PHP 5.6.26
  • Apache 2.4.6
  • Composer 1.3.2

  • 이번에는 Vagrant를 사용하여 위의 구성으로 가상 환경을 구축했습니다.

    문서 루트 정보


    [vagrant@localhost ~]$ tree -d -L 2 /vagrant/
    /vagrant/
        ├── html    <- ドキュメントルート
        └── program
    
    /vagrant/html 디렉토리를 문서 루트로 하고, CakePHP3 는 /vagrant/program 디렉토리내에 인스톨 하는 가정으로 작업을 실시합니다.

    작업 절차



    1. CakePHP3 설치



    우선, CakePHP3 를 인스톨 하지 않으면 시작되지 않습니다. 아래 절차에 따라 /vagrant/program 디렉토리에 CakePHP3을 설치합니다.
    # 1. /vagrant/program ディレクトリに移動
    [vagrant@localhost ~]$ cd /vagrant/program/
    
    # 2. composer create-project --prefer-dist cakephp/app cakephp を実行して CakePHP3 をインストールする
    [vagrant@localhost program]$ composer create-project --prefer-dist cakephp/app cakephp
    
    Composer 에 경로가 없으면 php composer.phar create-project --prefer-dist cakephp/app cakephp 를 실행하십시오.
    이것으로 CakePHP3 설치가 완료되었습니다. 설치가 완료되면 다음과 같은 디렉토리 구성이 됩니다.
    [vagrant@localhost ~]$ tree -d -L 3 /vagrant/
    /vagrant/
        ├── html
        └── program
            └── cakephp
                ├── bin
                ├── config
                ├── logs
                ├── plugins
                ├── src
                ├── tests
                ├── tmp
                ├── vendor
                └── webroot
    

    2. webroot 디렉토리의 파일이나 디렉토리를 /vagrant/html 디렉토리에 복사



    CakePHP3 설치가 완료되면 /vagrant/program/cakephp/webroot 디렉토리의 파일과 디렉토리를 /vagrant/html 디렉토리에 복사합니다.
    # 下記コマンドで /vagrant/program/cakephp/webroot ディレクトリ内のファイルやディレクトリを /vagrant/html ディレクトリにコピーする
    [vagrant@localhost ~]$ cp -apvr /vagrant/program/cakephp/webroot/* /vagrant/program/cakephp/webroot/.[^.]* /vagrant/html/
    
    webroot 디렉토리내의 파일이나 디렉토리를 무사하게 카피 할 수 있으면 다음과 같은 디렉토리 구성이 됩니다.
    [vagrant@localhost ~]$ tree -d -L 3 /vagrant/
    /vagrant/
        ├── html
        │   ├── css
        │   ├── font
        │   ├── img
        │   └── js
        └── program
            └── cakephp
                ├── bin
                ├── config
                ├── logs
                ├── plugins
                ├── src
                ├── tests
                ├── tmp
                ├── vendor
                └── webroot
    

    3. index.php 편집


    /vagrant/program/cakephp/webroot 디렉터리의 파일이나 디렉터리 복사가 완료된 것만으로는 제대로 작동하지 않습니다. index.php 파일내에 기술되고 있는 내용을 편집하지 않으면 파일을 읽어들일 수 없어 에러가 됩니다.
    그래서 에러가 되지 않게 /vagrant/html/index.php 의 27 행과 33 행째의 파일 패스와 디렉토리 패스를 이하와 같이 재기록합니다.
    <?php
    /**
     * The Front Controller for handling every request
     *
     * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
     * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
     *
     * Licensed under The MIT License
     * For full copyright and license information, please see the LICENSE.txt
     * Redistributions of files must retain the above copyright notice.
     *
     * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
     * @link          http://cakephp.org CakePHP(tm) Project
     * @since         0.2.9
     * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
     */
    // for built-in server
    if (php_sapi_name() === 'cli-server') {
        $_SERVER['PHP_SELF'] = '/' . basename(__FILE__);
    
        $url = parse_url(urldecode($_SERVER['REQUEST_URI']));
        $file = __DIR__ . $url['path'];
        if (strpos($url['path'], '..') === false && strpos($url['path'], '.') !== false && is_file($file)) {
            return false;
        }
    }
    
    /** 27行目 ここの require 部分を以下の1行を追加し書き換える **/
    // require dirname(__DIR__) . '/vendor/autoload.php';
    // cakephp までのパスを生成
    $cakephpRoot = realpath(dirname(__FILE__) . '/../program/cakephp');
    require $cakephpRoot . '/vendor/autoload.php';
    
    use App\Application;
    use Cake\Http\Server;
    
    // Bind your application to the server.
    // $server = new Server(new Application(dirname(__DIR__) . '/config'));
    
    /** 33行目 ここの config ディレクトリまでのパスを以下に書き換える **/
    $server = new Server(new Application($cakephpRoot . '/config'));
    
    // Run the request/response through the application
    // and emit the response.
    $server->emit($server->run());
    

    표시 확인



    위의 작업 순서대로 작업을 하고 브라우저에서 액세스하여 아래와 같이 표시되면 무사히 CakePHP3를 문서 루트 외부에 설치하는 데 성공합니다.


    만약 CakePHP3 를 문서 루트 밖에 설치하고 싶은 분은 참고해 보세요.

    좋은 웹페이지 즐겨찾기