【问题标题】:PHP script to download file using web browser使用 Web 浏览器下载文件的 PHP 脚本
【发布时间】:2015-10-22 20:47:56
【问题描述】:

我正在做一个小项目,使用基于 Web 的查询从 ftp 服务器下载文件。我创建了一个 HTML 表单作为前端,它从用户那里获取 ftp 服务器名称和文件名,然后与 php 脚本交互,以连接 ftp 服务器并下载指定的文件。我将 html 和 php 文件都保存在我的大学网络服务器上。当我直接从服务器的命令行运行 PHP 脚本时,我可以在运行网络服务器的机器上下载文件。但我无法使用网络浏览器在本地计算机上下载文件。

|在本地机器上运行的 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 浏览器调用脚本时,我收到一个错误“文件未打开”。

你能告诉我有什么方法可以通过我的网络浏览器下载文件吗?

谢谢!

【问题讨论】:

  • 我假设您在 Linux 服务器上。此文件file.txt 上的 Linux 权限是什么?

标签: php curl


【解决方案1】:
  1. 这可能是文件所有权问题

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

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

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

  2. 检查php配置

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

  3. 下载本身没有启动

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

    我会添加一个检查,即脚本不是从 CLI 调用的 然后将标题转发到下载的文件。

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

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

    参考:Redirect page after process complete in PHP

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多