2012-11-15 23 views
0

上使用PUT文件://我已經編寫了一個腳本來使用file_get_contents();將圖像文件上傳到服務器,這在使用相對文件路徑(例如, /var/test/image1.jpg以及當我使用遠程URL例如。 http://domain.com/test/image1.jpgPHP - 在沒有表單的情況下訪問/上傳本地文件到服務器。在API

但是,它不適用於本地路徑,即。文件:// C:/Users/me/Pictures/image1.jpg。我得到,「file_get_contents(file://C:/Users/me/Pictures/image1.jpg) [function.file-get-contents]:未能打開流:沒有這樣的文件或目錄」或「不支持遠程主機文件訪問」。

我真的需要這樣做,以便遠程客戶端可以通過API將本地映像上傳到我的服務器。因此,我不能使用表單並需要使用此處指定的PUT方法([http://www.php.net/manual/en/features.file-upload.put-method.php][1]),但是如何我訪問該文件?

我的API的代碼如下,但我試圖找出如何從客戶端本地計算機獲取該文件的內容:

if($_SERVER['REQUEST_METHOD'] == 'PUT') { 
    $input = file_get_contents("php://input"); //filepath passed from client in XML 

//Convert the XML to an object we can deal with 
$xml = simplexml_load_string($input); 

$file_path = $xml->image->filepath; 

if (file_exists($file_path)){ 

    $file_data = file_get_contents($file_path); 

    //Initialise the Curl Instance 
    $ch = curl_init(); 

    //Set our Curl Options 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
    curl_setopt($ch, CURLOPT_URL, $url); 

    curl_setopt($ch, CURLOPT_POST, TRUE); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $file_data); 

    //Execute the request 
    $response = curl_exec($ch); 

    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

    //Close the Handle 
    curl_close($ch); 
} 
+0

奇怪的一個簡單的例子,不要評論...... upvoted正因爲如此。 – Asken

+1

你想做什麼?你有沒有上傳圖片並試圖將其提供給用戶?它看起來像我試圖訪問客戶端文件時使用file:// C:/ Users ... – Asken

+0

@Asken,感謝有點困惑的downvote自己!我正嘗試從遠程計算機上傳文件而不使用表單。我正在使用Curl。 – LeeTee

回答

2

你不應該指定file:// 要訪問本地路徑你可以直接做

file_get_contents('C:/Users/me/Pictures/image1.jpg'); 

您也可以導航相對於當前目錄,使用基於../導航像下面

file_get_contents('../../../somefile.xyz'); 

編輯:如果您嘗試訪問客戶端文件,即遠程路徑是這樣,那是行不通的。你需要像HTTP,FTP等東西來傳輸你的文件。簡單地給一個本地文件系統地址是不夠的。

終點需要以某種方式使現有的文件(HTTP/FTP服務器),或者你需要通過瀏覽器和<input>場讓客戶端upload它。

+0

試過了,不起作用 – LeeTee

+0

@LeeTee你是什麼意思'本地路徑「?如果這是您正在訪問的遠程計算機,'file_get_contents' **不能**爲您獲取它。如果它是服務器中的本地訪問,請刪除'file://'。 –

+0

檢查該文件的權限及其說SYSTEM完整權限。我認爲那是正確的? – LeeTee

1

沒有辦法,您可以使用file_get_contents()從遠程客戶端的計算機上打開任何文件,除非它們在本地運行(它們還需要爲此設置PHP),然後以某種方式將其提交到您的服務器。

file_get_contents()允許你打開文件,這些文件在同一臺機器上使用您的腳本,而不是在不同的人

可以當人們downvote在http://www.tizag.com/phpT/fileupload.php看看文件上傳

+0

是的,這是可能的。檢查文檔中的示例http://php.net/manual/en/function.file-get-contents.php –

+0

好吧,那麼如何讓遠程用戶通過API將文件上傳到我的服務器? – LeeTee

+0

如何讓他們在沒有表格的情況下將其提交給我的服務器? – LeeTee

相關問題