2014-04-06 92 views
0

我試圖將遠程文件複製到我的服務器。在做這件事之前,我想測試一下這個文件是否存在。即使我手動驗證了遠程服務器上存在該文件,以下代碼也不起作用。我將PHP的allow_url_fopen設置爲On。有什麼我失蹤?舊的程序方法file_exists()是我想要複製的。驗證遠程文件存在與SplFileInfo

//... 
    $fileInfo = new \SplFileInfo($imageLocation); 
    if($fileInfo->isFile()) { 
     echo "doesn't exist"; 
    } else { 
     echo "exists, so copy file here"; 
    } 
+0

而不是使用SplFileInfo,你爲什麼不使用用於文件複製協議的機制是什麼?如果是FTP,很容易檢查文件是否存在,如果是HTTP,則很容易檢查文件是否存在。 –

+0

在代碼中,我不確定它是本地文件還是遠程文件。 –

回答

2

沒有爲SplFileInfo類沒有file_exists()等同。

SplFileInfo::isFile()是一個不同的檢查,它與is_file()函數(它們共享底層代碼)相關。

只要它引用支持stat()功能的流包裝器,您就可以在$imageLocation上調用file_exists()函數。包裝如file://,phar://ftp://(後者僅部分)支持這一點。

不幸的是,http://(和https://)包裝不支持stat()電話。這意味着file_exists()以及其他調用stat()的函數將返回false。如果不存在

0
$fileInfo->getRealPath(); 

返回假