在Zend公司FW:啓用URL重寫後,PHP file_exists()無法檢查文件是否存在?
file_exists('xx/xxx/xxxx.jpg');
返回1,但XX/XXX/xxxx.jpg沒有文件或目錄。
這是Zend FW返回的錯誤頁面。因爲它不是一個文件或有效的網址
我該如何檢查文件的存在?
在Zend公司FW:啓用URL重寫後,PHP file_exists()無法檢查文件是否存在?
file_exists('xx/xxx/xxxx.jpg');
返回1,但XX/XXX/xxxx.jpg沒有文件或目錄。
這是Zend FW返回的錯誤頁面。因爲它不是一個文件或有效的網址
我該如何檢查文件的存在?
file_exists檢查文件或目錄是否存在。 嘗試使用is_file
is_file的工作原理,爲什麼?在我的文件系統中沒有這樣的文件或目錄,但file_exists返回1和is_file返回0 – 2011-03-19 23:33:13
奇怪,也許你以前有過一個文件或目錄,它已被file_exists緩存 – Codler 2011-03-20 09:23:55
不,我確定我沒有任何文件那裏 – 2011-03-21 20:17:10
要檢查是否存在通過HTTP,您需要檢查HTTP響應代碼。做這個IMO最簡單的方法是使用curl。試試這個:
$url = 'http://google.com/this_does_not_exist.jpg';
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,10);//timeout
$res = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
switch ($code % 100){
case 2: echo "exists\n"; break;
case 3: echo "too many redirects\n"; break;
case 4: echo "does not exist\n"; break;
case 5: echo "5xx error - may or may not exist once server fixed\n"; break;
default:
echo "Something weird. HTTP response code = $code\n";
}
該函數是一個本地PHP函數...嘗試在沒有Zend Framework的PHP腳本中運行它以查看會發生什麼。此外,該開始/意味着它從OS文件系統的頂部加載,而不是從服務器URL的頂部加載。 – 2011-03-19 18:36:48
還要注意file_exists()被緩存,所以如果文件存在,被測試,然後被刪除,然後再次測試,第二個測試仍然會返回true。 – 2011-03-19 18:42:10
您可以使用clearstatcache()清除緩存:http://www.php.net/manual/en/function.clearstatcache.php – Brad 2011-03-19 18:46:54