我正在开发一个小项目,使用基于Web的查询从ftp服务器下载文件。我创建了一个HTML表单作为前端,它从用户获取ftp服务器名称和文件名,然后与php脚本交互,连接ftp服务器并下载指定的文件。我在我的大学网络服务器上保存了html和php文件。当我从服务器直接从命令行运行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浏览器调用脚本时,出现错误&#34;文件未打开&#34;。
请告诉我有没有办法通过网络浏览器下载文件。
谢谢!
答案 0 :(得分:0)
这可能是文件所有权问题
请检查文件的权限和所有权。
为了更好地调试它,您可以使用此处提供的部分脚本:
检查php配置
CLI的php配置与Web服务器的php配置有所不同。与CLI相比,后者可能有一些限制。请比较或区分文件(以查看配置差异)。
下载本身未启动
脚本通过curl从ftp服务器下载文件 并将其存储到您的网络服务器上的文件夹中, 但是您没有将浏览器(客户端)指向下载的文件 也不从脚本启动浏览器的下游。
我会添加一个检查,即不从CLI调用脚本 然后向下载的文件执行标题。
if(PHP_SAPI !== 'cli') {
header("Location: WWW_URL_SERVER . $path_to . $targetFile);
}
您可以使用浏览器中的“直接链接”来测试下载独立版,以启动下载。这又是一个权限,这次Web服务器本身提供静态文件并需要权限才能这样做。