2011-01-08 59 views
7

我在Linux服務器上的file_exists() PHP函數有一個奇怪的問題。PHP file_exists()在某些文件上返回false

使用file_exists在編輯之前檢查圖像是否在服務器上,它有時會失敗,原因不明。文件路徑是絕對的,我已經通過ssh檢查了它們,它們在指定的路徑上是100%。

失敗file_exists()的圖像仍將顯示在瀏覽器中。代碼沒有什麼區別,一個基本的var_dump(file_exists('/home/user/path/image.jpg'));將返回false。

文件權限/所有權在所有圖像和父目錄上完全相同。安全模式關閉。沒有PHP錯誤。我現在難倒了,不知道該找什麼。

下面是圖像如何在服務器上:

/home/user/public_html/images/location/1.jpg -- will work 
/home/user/public_html/images/location2/1.jpg -- won't work 
/home/user/public_html/images/location2/2.jpg -- will work 

我有服務器的root訪問權限,如果任何人有任何想法,我會很樂意嘗試出來。

在此先感謝您的建議,請告訴我您是否需要額外信息。

編輯: 要回答以下評論中的問題。

  • 是的圖像在那裏,它絕對不是緩存。
  • 安全模式關閉(我已經在我的文章中提到過)。
  • 路徑不是符號鏈接,而是直接鏈接到服務器上的文件位置。
  • 鳳凰,它是一致的。工作文件將始終工作,反之亦然。名字是1.jpg,1.thumb.jpg等等,所以它對陌生人物或空間來說不是問題。
[[email protected] ~]# ls -l /home/user/public_html/images/Hawkhurst/ 
total 92 
-rwxr-xr-x 1 user user 24501 Aug 11 2009 1.jpg 
-rwxr-xr-x 1 user user 1672 Aug 11 2009 1.thumb.jpg 
-rwxr-xr-x 1 user user 14983 Aug 11 2009 2.jpg 
-rwxr-xr-x 1 user user 1370 Aug 11 2009 2.thumb.jpg 
-rwxr-xr-x 1 user user 17238 Aug 11 2009 3.jpg 
-rwxr-xr-x 1 user user 1453 Aug 11 2009 3.thumb.jpg 
-rwxr-xr-x 1 user user 14168 Aug 11 2009 4.jpg 
-rwxr-xr-x 1 user user 1464 Aug 11 2009 4.thumb.jpg 
[[email protected] ~]# 

我試圖與權限777和755這有什麼區別。例如在這個文件夾中,1和2可能工作,而3 & 4不要...

我跑了一個快速測試,看看apache/php的運行和他們沒有運行,但沒有解釋爲什麼有些圖像可以工作,有些則沒有完全相同的權限。

編輯2:問題解決了。不能相信它有多愚蠢,從數據庫中調用的一些文件名在最後有空格......製作原始腳本的人在保存之前沒有進行任何清理。

+0

是文件居然有?您可能會因緩存而看到圖片。 – 2011-01-08 16:17:02

+0

您是否啓用了safe_mode? – Mchl 2011-01-08 16:20:38

回答

4

嘗試運行ls -l /home/user/public_html/images/location/並將輸出添加到您的問題。

這很可能是一個權限問題。 PHP可能沒有讀取文件的權限。

1

經過網絡上的大量搜索之後,我自己找到了解決方案。希望它對其他人有所幫助: 確保在您的apache httpd.conf中配置的用戶和組與apache組和用戶相同。

1

也許,在文件的名稱中有一個空白符號。這一點很重要。

0

我也遇到了取得正確結果的問題。 事實證明,它對我來說是一個權限問題位於該文件夾。 您必須確保文件夾具有Apache用戶的eXecute權限。 要解決,我只是這樣做對我的Linux盒: 搭配chmod G + X csv_files

親切的問候 伊萬