[英]How to enable download progress bar in a web browser during file download in PHP script?
[英]PHP script to download file using web browser
我正在一个小项目上,使用基于Web的查询从ftp服务器下载文件。 我已经创建了一个HTML表单作为前端,该表单从用户那里获取ftp服务器名称和文件名,然后与php脚本进行交互,以与ftp服务器连接并下载指定的文件。 我已经将html和php文件都保存在大学的Web服务器上。 当我直接从服务器通过命令行运行PHP脚本时,可以在运行Web服务器的计算机上下载文件。 但是我无法使用网络浏览器在本地计算机上下载文件。
| 在本地计算机上运行的Web浏览器| <-无法下载文件-> | 我的PHP脚本在Web服务器上运行| <-能够下载文件-> | FTP服务器|
<?php
$targetFile = 'file.txt';
$curl = curl_init();
$fh = fopen(dirname(__FILE__) . '/'.$targetFile,'w+b');
if ($fh == FALSE){
print "File not opened<br>";
exit;
}
echo "<br>configuring curl...<br>";
curl_setopt($curl, CURLOPT_URL, "ftp://full_path_name_of_file");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_FILE, $fh);
curl_exec($curl);
echo curl_error($curl);
curl_close($curl);
fclose($fh);
?>
当我从服务器计算机的命令行运行此php脚本时,文件下载成功。 但是,当我使用个人计算机从Web浏览器调用脚本时,出现错误“文件未打开”。
您能告诉我有什么方法可以通过网络浏览器下载文件吗?
谢谢!
这可能是文件所有权问题
请检查文件的权限和所有权。
为了更好地调试它,您可以使用此处提供的部分脚本:
检查PHP配置
CLI的php配置和Web服务器的php配置之间有区别。 与CLI相比,后者可能会有一些限制。 请比较或比较文件(以查看配置差异)。
下载本身未启动
该脚本通过curl从ftp服务器下载文件并将其存储到Web服务器上的文件夹中,但是您既没有将浏览器(客户端)指向下载的文件,也没有从脚本启动浏览器的下游功能。
我要添加一个检查,即未从CLI调用该脚本,然后将标头转发到下载的文件。
if(PHP_SAPI !== 'cli') { header("Location: WWW_URL_SERVER . $path_to . $targetFile); }
您可以使用浏览器中的“直接链接”来启动下载,从而独立测试下载。 这又是一个权限,这一次Web服务器本身会提供静态文件并需要权限才能这样做。
参考: 在PHP中完成处理后重定向页面
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.