「 Could not determine temp directory, please specify a cache_dir manually」的錯誤訊息。
後來發現是因為程式沒有讀取 /tmp 資料夾的權限,
因我沒辦法改伺服器的 /tmp 權限,只好由修改程式著手。
本來應該是直接修改 Zend_Cache 的 cache_dir 資料夾設定。
但我只有單一使用 Zend_Http_Client,
沒有自己建立 Zend_Cache 的物件,
Zend_Cache 好像是 Zend_Http_Client 在某些情況下,會自己建立,
但查看 Zend_Http_Client 的API文件,找不到修改 cache_dir 的 method。
沒有自己建立 Zend_Cache 的物件,
Zend_Cache 好像是 Zend_Http_Client 在某些情況下,會自己建立,
但查看 Zend_Http_Client 的API文件,找不到修改 cache_dir 的 method。
後來發現Zend_Cache抓cache資料夾的方法為。(以下程式碼為 Zend Framework 1.11.11 版的內容)
/** * Determine system TMP directory and detect if we have read access * * inspired from Zend_File_Transfer_Adapter_Abstract * * @return string * @throws Zend_Cache_Exception if unable to determine directory */ 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; } } } } $upload = ini_get('upload_tmp_dir'); if ($upload) { $dir = realpath($upload); if ($this->_isGoodTmpDir($dir)) { return $dir; } } if (function_exists('sys_get_temp_dir')) { $dir = sys_get_temp_dir(); if ($this->_isGoodTmpDir($dir)) { return $dir; } } // Attemp to detect by creating a temporary file $tempFile = tempnam(md5(uniqid(rand(), TRUE)), ''); if ($tempFile) { $dir = realpath(dirname($tempFile)); unlink($tempFile); if ($this->_isGoodTmpDir($dir)) { return $dir; } } if ($this->_isGoodTmpDir('/tmp')) { return '/tmp'; } if ($this->_isGoodTmpDir('\\temp')) { return '\\temp'; } Zend_Cache::throwException('Could not determine temp directory, please specify a cache_dir manually'); }
由程式碼可以發現,還有另外幾種方式可以修改cache_dir:
- 在$_ENV, $_SERVER的環境變數中,
設定 TMPDIR、TEMP 、 TMP 、 windir 、 SystemRoot 其中一個的值,
例如 $_SERVER['TMP'] = '/home/tmp',則 cache_dir 會改成 '/home/tmp'。 - 修改 php.ini 的 upload_tmp_dir 設定。
雖然以上兩種方法也可修改 cache_dir 的設定,
但我想應該還有用Zend Framework提供的method來設定的方式,
只是我一時找不到。
沒有留言:
張貼留言