以下の手順で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 None
をAllowOverride 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行目で書き込みできません
コマンド Sudo chmod -R 777 cakephp/app/tmp
はtmp
のみを書き込み可能にしました。キャッシュとそのサブディレクトリも書き込み可能にする必要があります。そうしないと、Cakeはキャッシュファイルをtmpのキャッシュディレクトリに書き込むことができません。
したがって、これらのディレクトリは書き込み可能である必要があります。
cakephp/app/tmp/cache
cakephp/app/tmp/cache/persistent
cakephp/app/tmp/cache/models
ログディレクトリも書き込み可能であることを確認してください:cakephp/app/tmp/logs
。
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"
そして、それは役立ちます、私の問題は修正されました。おそらくそれは誰かのために役立つでしょう。楽しい!
同様の問題に直面しました。ここに私を助けたいくつかのことがある:
chmod 777
の "sledgehammer"アプローチを使用したくない場合(たとえば、 [プロダクションでは避けてください )]、CakePHPのインストール手順には使用方法の詳細が記載されています代わりにACL:
そこにあるSudo
コマンドには、おそらくsetfacl
を使用する必要があることに注意してください。
ただし、私の経験(CakePHP 2)では、これらのコマンドでは不十分です。これらのコマンドは、Webサーバーユーザーにキャッシュなどへのアクセス権を与えますが、コマンドラインから実行するもの(cake
コマンドなど)はおそらく、Webサーバーユーザーではなく、yourユーザーとして実行されています。
したがって、上記にリンクされているsetfacl
コマンドをもう一度実行し、${HTTPDUSER}
をユーザー名に置き換えてください。ユーザー名がわからない場合は、whoami
と入力して検索します。
chmod -R 777/var/www/cakephp/app/tmp /を使用して、つまりフォルダを実行可能にすると、この問題が解決します。 cron、つまりapp/Console/Command /フォルダーにあるシェルをテストしているときにも、同様の問題に直面しました。 cronを複数回実行すると、tmp /フォルダーの権限が上書きされ、この時点で権限エラーが表示されます。これは、tmp /フォルダーを再帰的に実行可能にすることで回避できます。
一時的な修正として、提供された.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}"
「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'