web-dev-qa-db-ja.com

Ubuntu 10.4でCakePHPを実行中にファイル権限エラーが発生する

以下の手順でCakePHP 2.0のフレームワークをインストールしました:

1. Start the terminal
2. Sudo mkdir /var/www/cakephp
3.Sudo cp -r ~/cakephp/* /var/www/cakephp

Tmpフォルダーの権限を変更する

4. Sudo chmod -R 777 cakephp/app/tmp

Mod-rewriteを有効にする

5. Sudo a2enmod rewrite

ファイル/ etc/Apache2/sites-enabled/000-defaultを開き、AllowOverride NoneAllowOverride Allに変更します

6. Sudo vim /etc/Apache2/sites-enabled/000-default

Apacheを再起動します

7. Sudo /etc/init.d/Apache2 restart

ブラウザを開いてアドレス http:// localhost/cakephp / を入力すると、次のエラーメッセージが表示されます。

警告:_cake_core_キャッシュは、310行の/ var/www /cakephp/lib/Cake/Cache/Cache.phpのファイルキャッシュに 'cake_dev_en-us'を書き込むことができませんでした
警告:_cake_core_キャッシュは、310行の/var/www/cakephp/lib/Cake/Cache/Cache.phpのファイルキャッシュに「cake_dev_en-us」を書き込めませんでした
警告:/ var/www/cakephp/app/tmp/cache/persistent /は/ var/www/cakephp /lib/Cake/Cache/Engine/FileEngine.phpの320行目で書き込みできません
警告:/ var/www/cakephp/app/tmp/cache/models /は/var/www/cakephp/lib/Cake/Cache/Engine/FileEngine.phpの320行目で書き込みできません
警告:/ var/www/cakephp/app/tmp/cache /は/ var/www/cakephp/lib/Cake /Cache/Engine/FileEngine.phpの320行目で書き込みできません

19
Dinesh Chandra

コマンド Sudo chmod -R 777 cakephp/app/tmptmpのみを書き込み可能にしました。キャッシュとそのサブディレクトリも書き込み可能にする必要があります。そうしないと、Cakeはキャッシュファイルをtmpのキャッシュディレクトリに書き込むことができません。

したがって、これらのディレクトリは書き込み可能である必要があります。

cakephp/app/tmp/cache
cakephp/app/tmp/cache/persistent
cakephp/app/tmp/cache/models

ログディレクトリも書き込み可能であることを確認してください:cakephp/app/tmp/logs

45
mensch

CachePhp 3で非常によく似た問題が発生しました。

Warning (512): /cache/persistent/ is not writable [CORE/src/Cache/Engine/FileEngine.php, line 439]

Warning (512): Cache engine Cake\Cache\Engine\FileEngine is not properly configured. [CORE/src/Cache/Cache.php, line 177]

私はCakePhpの初心者なので、問題をデバッグしましたCORE/src/Cache/Engine/FileEngine.php。これは次のような関数です:

protected function _active()
{
    $dir = new SplFileInfo($this->_config['path']);
    $path = $dir->getPathname();

    $success = true;
    if (!is_dir($path)) {        
        //@codingStandardsIgnoreStart
        $success = @mkdir($path, 0775, true);
        //@codingStandardsIgnoreEnd
    }

    $isWritableDir = ($dir->isDir() && $dir->isWritable());

    if (!$success || ($this->_init && !$isWritableDir)) {
        $this->_init = false;
        trigger_error(sprintf(
            '%s is not writable',
            $this->_config['path']
        ), E_USER_WARNING);
    }

    return $success;
}

キャッシュディレクトリが書き込み可能かどうかをチェックし、パスフォームに関するデータを取得します$this->_config['path']変数。この変数はデフォルトで.envファイル(使用する場合)から初期化され、次のような行があります。

export CACHE_DEFAULT_URL="File://tmp/cache/?prefix=${APP_NAME}_default&duration=${CACHE_DURATION}"
export CACHE_CAKECORE_URL="File://tmp/cache/persistent?prefix=${APP_NAME}_cake_core&serialize=true&duration=${CACHE_DURATION}"
export CACHE_CAKEMODEL_URL="File://tmp/cache/models?prefix=${APP_NAME}_cake_model&serialize=true&duration=${CACHE_DURATION}"

すべてを変更しましたFile:からNull:、次のように:

export CACHE_DEFAULT_URL="Null://tmp/cache/?prefix=${APP_NAME}_default&duration=${CACHE_DURATION}"
export CACHE_CAKECORE_URL="Null://tmp/cache/persistent?prefix=${APP_NAME}_cake_core&serialize=true&duration=${CACHE_DURATION}"
export CACHE_CAKEMODEL_URL="Null://tmp/cache/models?prefix=${APP_NAME}_cake_model&serialize=true&duration=${CACHE_DURATION}"
export CACHE_DRV_DEFLT = "Null"
export CACHE_DRV_MODEL = "Null"
export CACHE_DRV_CORE = "Null"

そして、それは役立ちます、私の問題は修正されました。おそらくそれは誰かのために役立つでしょう。楽しい!

1
Vaha

同様の問題に直面しました。ここに私を助けたいくつかのことがある:

chmod 777の "sledgehammer"アプローチを使用したくない場合(たとえば、 [プロダクションでは避けてください )]、CakePHPのインストール手順には使用方法の詳細が記載されています代わりにACL:

そこにあるSudoコマンドには、おそらくsetfaclを使用する必要があることに注意してください。

ただし、私の経験(CakePHP 2)では、これらのコマンドでは不十分です。これらのコマンドは、Webサーバーユーザーにキャッシュなどへのアクセス権を与えますが、コマンドラインから実行するもの(cakeコマンドなど)はおそらく、Webサーバーユーザーではなく、yourユーザーとして実行されています。

したがって、上記にリンクされているsetfaclコマンドをもう一度実行し、${HTTPDUSER}をユーザー名に置き換えてください。ユーザー名がわからない場合は、whoamiと入力して検索します。

1
Sam

chmod -R 777/var/www/cakephp/app/tmp /を使用して、つまりフォルダを実行可能にすると、この問題が解決します。 cron、つまりapp/Console/Command /フォルダーにあるシェルをテストしているときにも、同様の問題に直面しました。 cronを複数回実行すると、tmp /フォルダーの権限が上書きされ、この時点で権限エラーが表示されます。これは、tmp /フォルダーを再帰的に実行可能にすることで回避できます。

1
Dhiraj

一時的な修正として、提供された.envファイルを使用する必要があり、権限が問題を解決しなかった場合は、アプリのディレクトリを指す絶対パスを使用するように.envファイルを変更します

export CACHE_FOLDER="/var/www/absolute_path_to_my_cakephp_app/"
export CACHE_DURATION="+2 minutes"
export CACHE_DEFAULT_URL="file://${CACHE_FOLDER}tmp/cache/?prefix=${APP_NAME}_default&duration=${CACHE_DURATION}"
export CACHE_CAKECORE_URL="file://${CACHE_FOLDER}tmp/cache/persistent?prefix=${APP_NAME}_cake_core&serialize=true&duration=${CACHE_DURATION}"
export CACHE_CAKEMODEL_URL="file://${CACHE_FOLDER}tmp/cache/models?prefix=${APP_NAME}_cake_model&serialize=true&duration=${CACHE_DURATION}"
0
Ionut Irofte

chmod -R 777 tmp/cache” tmpフォルダーが存在しない場合は、mkdir tmpおよびmkdir tmp/cacheを使用してtmpファイルを作成します

chmod -R 777 logs

chmod -R 777 tmp/sessions

chmod -R 777 tmp/tests

chcon -R -t httpd_sys_content_rw_t 'tmp'

chcon -R -t httpd_sys_content_rw_t 'logs'
0
pdchaudhary