我正在尝试从FTP服务器下载PHP文件,我也可以从http访问。例如:FTP://username:password@someserver.com/file_name_here.gz
。该文件被强制作为服务器的附件(而不是PDF或TXT可以执行的操作,例如:输出)。
我尝试了3种不同的方法:
我认为CURL是这样做的,但我无法下载文件......这是我的代码:
$curl = curl_init();
$url ='ftp://'.$network['username'].':'.$network['password'].'@'.$network['metadata_url'].'/'.$path.'/'.$data['title'];
curl_setopt($curl, CURLOPT_URL,$url);
//curl_setopt($curl, CURLOPT_USERPWD, "$_FTP[username]:$_FTP[password]");
//curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
$file = fopen("./feeds/".$data['title'], "w");
curl_setopt($curl, CURLOPT_FILE, $file);
$result = curl_exec ($curl);
我尝试在CURLOPT_URL中设置用户名和密码,并使用CURL设置它们。两种方式都会发生同样的事情......
你能帮忙吗?
Edit
:忘记提及该文件是从服务器动态提供的。因此,例如真实文件是:filename.gz.check
当我省略.check
部分时,我得到原始文件。不知道为什么他们这样做但我需要按原样使用它。
答案 0 :(得分:1)
(一个注意:“强制作为附件”的概念在FTP服务器的上下文中没有意义.FTP服务器只提供位;由FTP客户端来决定如何处理它们。与HTTP服务器形成对比,HTTP服务器提供这些位,但也提供有关位的元数据(例如,HTTP标头);它是指示客户端做什么的元数据(显示与强制下载/保存操作)。使用您的浏览器作为FTP客户端,浏览器决定如何处理对FTP GET请求的响应,并且该过程完全独立于如何处理如何处理对HTTP GET请求的响应。)
您是否首先使用硬编码值尝试了代码,以确保问题不是您在$network
和$_FTP
变量中传递了意外或未预料到的值数据?换句话说,测试一下,替换已知良好的用户名,密码,主机名和文件名,并确保您有权将文件写入当前工作目录:
$curl = curl_init();
$url = "ftp://hostname/filename.gz";
$file = fopen("filename.gz", "w");
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_FILE, $file);
curl_setopt($curl, CURLOPT_USERPWD, "username:password");
curl_exec($curl);
curl_close($curl);
fclose($file);
无论如何,您还可以添加以下内容以获取发送回浏览器的调试信息:
curl_setopt($curl, CURLOPT_VERBOSE, 1);
如果将其添加到代码中,您会收到哪些调试信息?
答案 1 :(得分:0)
对于基于cURL的解决方案尝试没有任何超时:
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT,0);
你也可以尝试这个程序,让我们知道会发生什么:
<?php
$conn = ftp_connect("ftp.someserver.com") or die("Could not connect");
ftp_login($conn,"username","password");
echo ftp_size($conn,"source.tgz");
echo ftp_get($conn,"target.tgz","source.tgz",FTP_BINARY);
ftp_close($conn);
?>