dongtuanzi1080 2015-10-22 20:47
浏览 161
已采纳

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

I am working on a small project to download files from a ftp server using a web based query. I have create a HTML form as a front end, which takes from user the ftp server name and the file names, and then interacts with the php script, to connect with ftp server and download the files specified. I have kept both the html and php files on my university webserver. I am able to download files on the machine running the webserver when I run the PHP script directly form the command line from the server. But I am not able to download files on my local computer using a web browser.

| Web-browser running on local machine | <--not able to download file--> | My PHP script running on web-server machine | <--Able to download file-->| FTP Server |

<?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);
?>

File is downloaded successfully when I run this php script from the command line from the server machine. But when I invoke the script from the web browser using my personal machine, I get an error "File not opened".

Can you please tell is there any way I can download the file via my web browser.

Thanks!

  • 写回答

1条回答 默认 最新

  • douzuita7325 2015-10-22 21:46
    关注
    1. this might be a file ownership issue

      Please check the permission and the ownership of the file.

      In order to debug this a bit better, you might use parts of the script provided here:

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

    2. check the php configuration

      there is a difference between the php configuration of the CLI and the one for the webserver. the later might have some restrictions, when compared to the CLI one. please compare or diff the files (to see the configuration difference).

    3. the download itself is not initiated

      The script downloads a file via curl from a ftp server and stores it to a folder on your webserver, but your are not pointing the browser (client) to the downloaded file nor initiating a downstream to the browser from the script.

      I would add a check, that the script is not called from the CLI and then do a header forward to the downloaded file.

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

      You can test the download standalone by using the "direct link" in your browser to initiate a download. This is again a permission thing, this time the webserver itself serves the static file and needs permission to do so.

      Referencing: Redirect page after process complete in PHP

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化