2017-08-11 136 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