使用php和curl下载可执行文件.phar文件
我正在尝试使用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
请尝试下面的代码,这是我们目前使用的从网址下载文件的方式。
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;
}
我刚刚测试过你的函数,感谢分享,但是仍然像这样创建的文件具有相同的行为'downloadFile('https://raw.githubusercontent.com/wp-cli/builds/gh-pages /phar/wp-cli.phar','wp-cli.phar');' –
@GeorgeDimitriadis我已经回答了您原来的帖子。这与您下载文件的方式无关。这与你无法执行它的事实有关 - 对文件没有可执行权限。 – Andy
当你说“什么都没有发生”你是什么意思?你没有输出运行该命令?检查文件的权限和所有者/组。它甚至可以由运行'php'的用户执行吗?下载的文件是否在您要执行它的相同目录中? – Andy
创建文件不会自动使其成为可执行文件,您需要更改权限(Linux CLI上的“chmod 775文件名”) –
@Andy通过“nothing happens”我的意思是我没有输出,是的,好像我输入了一个空白的命令。该文件的权限是'-rw-r - r - ',我是所有者。是的,我正在同一目录中运行这两个脚本(您看到的和下载的脚本),都在那里。 @NigelRen依然如此。我甚至用PHP的'chmod'函数尝试过。 –