使用Web浏览器下载文件的PHP脚本

时间:2015-10-22 20:47:57

标签: php curl

我正在开发一个小项目,使用基于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;。

请告诉我有没有办法通过网络浏览器下载文件。

谢谢!

1 个答案:

答案 0 :(得分:0)

  1. 这可能是文件所有权问题

    请检查文件的权限和所有权。

    为了更好地调试它,您可以使用此处提供的部分脚本:

    https://stackoverflow.com/a/10377285/1163786

  2. 检查php配置

    CLI的php配置与Web服务器的php配置有所不同。与CLI相比,后者可能有一些限制。请比较或区分文件(以查看配置差异)。

  3. 下载本身未启动

    脚本通过curl从ftp服务器下载文件 并将其存储到您的网络服务器上的文件夹中, 但是您没有将浏览器(客户端)指向下载的文件 也不从脚本启动浏览器的下游。

    我会添加一个检查,即不从CLI调用脚本 然后向下载的文件执行标题。

    if(PHP_SAPI !== 'cli') {
        header("Location: WWW_URL_SERVER . $path_to . $targetFile);
    }
    

    您可以使用浏览器中的“直接链接”来测试下载独立版,以启动下载。这又是一个权限,这次Web服务器本身提供静态文件并需要权限才能这样做。

    参考:Redirect page after process complete in PHP