2017-08-11 127 views
0

我正在嘗試使用curl來下載可執行文件的php腳本。到目前爲止,我可以下載文件,但下載後,該文件不可執行(即如果您運行php wp-cli.phar沒有任何反應)。我意識到這是預防安全風險的預期行爲,那麼如何告訴curl我希望將下載的文件視爲可執行文件?在命令行相應的命令是:curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar使用php和curl下載可執行文件.phar文件

這是我的代碼,它試圖在PHP腳本執行上面的命令,但是產生的文件是不可執行的:

set_time_limit(0); 
$fp = fopen ('./wp-cli.phar', 'w+'); 
$ch = curl_init('https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar'); 
curl_setopt($ch, CURLOPT_TIMEOUT, 50); 
curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_exec($ch); 
curl_close($ch); 
fclose($fp); 

附加信息
如果您想重現錯誤,請使用上面的內容創建一個名爲a.php的文件。然後運行php a.php然後運行php wp-cli.phar --info

+2

當你說「什麼都沒有發生」你是什麼意思?你沒有輸出運行該命令?檢查文件的權限和所有者/組。它甚至可以由運行'php'的用戶執行嗎?下載的文件是否在您要執行它的相同目錄中? – Andy

+1

創建文件不會自動使其成爲可執行文件,您需要更改權限(Linux CLI上的「chmod 775文件名」) –

+0

@Andy通過「nothing happens」我的意思是我沒有輸出,是的,好像我輸入了一個空白的命令。該文件的權限是'-rw-r - r - ',我是所有者。是的,我正在同一目錄中運行這兩個腳本(您看到的和下載的腳本),都在那裏。 @NigelRen依然如此。我甚至用PHP的'chmod'函數嘗試過。 –

回答

0

請嘗試下面的代碼,這是我們目前使用的從網址下載文件的方式。

public function downloadFile($url, $filepath){ 
    $fp = fopen($filepath, 'w+'); 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); 
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
    curl_setopt($ch, CURLOPT_FILE, $fp); 
    curl_exec($ch); 
    curl_close($ch); 
    fclose($fp); 

    return (filesize($filepath) > 0)? true : false; 
} 
+0

我剛剛測試過你的函數,感謝分享,但是仍然像這樣創建的文件具有相同的行爲'downloadFile('https://raw.githubusercontent.com/wp-cli/builds/gh-pages /phar/wp-cli.phar','wp-cli.phar');' –

+0

@GeorgeDimitriadis我已經回答了您原來的帖子。這與您下載文件的方式無關。這與你無法執行它的事實有關 - 對文件沒有可執行權限。 – Andy