Zend_Cacheを使用していないのに、safe_modeがスクリプトに腹を立てているのはなぜですか?
Zend_Cache
他のいくつかのZFコンポーネント(など)からも内部的に使用されるZend_Db
ためですZend_Translate
。
このエラーを回避するために、プロジェクトにデフォルトの/ tmpディレクトリを設定するにはどうすればよいですか?
ここでは2つの選択肢があります。
- コンポーネントが使用しているものを追跡し、ストレージ
Zend_Cache
を使用しない定義済みのバックエンドを持つキャッシュのカスタムインスタンスを使用するように構成します( ApcまたはMemcachedを確認してください)/tmp
- 185行目近くの実装を見て
Zend_Cache_Backend
、そのエラーを回避するためにコードを更新してください。
オプション1を選択すると、パフォーマンスが向上し(apcまたはmemcachedはファイルシステムよりも高速なストレージです)、プロジェクトで何が起こっているかをより細かく制御できます。ただし、構成する必要のあるコンポーネントが複数ある可能性があるため、プロジェクトで複数の変更が必要になる可能性があります。
オプション2を選択すると、1回の変更ですべてをハッキングでき、デフォルトのキャッシュインスタンスを使用するすべてのコンポーネントが反映されますが、コードをハッキングして内部実装で動作するため、ZFの将来のリリースでコードが破損する可能性があります。つまり、ZFがチェックするキーの1つを使用してENV
または変数を定義することでこれを実現できます。SERVER
警告が発生する前の行は次のとおりです。
public function getTmpDir()
{
$tmpdir = array();
foreach (array($_ENV, $_SERVER) as $tab) {
foreach (array('TMPDIR', 'TEMP', 'TMP', 'windir', 'SystemRoot') as $key) {
if (isset($tab[$key])) {
if (($key == 'windir') or ($key == 'SystemRoot')) {
$dir = realpath($tab[$key] . '\\temp');
} else {
$dir = realpath($tab[$key]);
}
if ($this->_isGoodTmpDir($dir)) {
return $dir;
}
}
}
}
したがって、ブートストラップのこのようなコードは問題を解決します。
// I assume you're using the default ZF project structure
// and that your-root/data/tmp is both writable and readable for
// the webserver user, because the _isGoodTmpDir method will check for that
$_SERVER['TMP'] = APPLICATION_PATH . '/../data/tmp';