如何修改PHP FTP上载脚本以下载文件
我找到了一个用于传输FTP文件的PHP脚本,它的工作原理与我的项目的一部分所需的完全相同。该脚本可以通过FTP将文件上传到另一台服务器,并且可以在运行过程中输出进度 我使用的代码是:如何修改PHP FTP上载脚本以下载文件,php,ftp,Php,Ftp,我找到了一个用于传输FTP文件的PHP脚本,它的工作原理与我的项目的一部分所需的完全相同。该脚本可以通过FTP将文件上传到另一台服务器,并且可以在运行过程中输出进度 我使用的代码是: $fp = fopen($local_file, 'r'); $conn_id = ftp_connect($source_ftp_server); $login_result = ftp_login($conn_id, $source_ftp_user_name, $source_ftp_use
$fp = fopen($local_file, 'r');
$conn_id = ftp_connect($source_ftp_server);
$login_result = ftp_login($conn_id, $source_ftp_user_name, $source_ftp_user_pass);
$ret = ftp_nb_fput($conn_id, $remote_file, $fp, FTP_BINARY);
while ($ret == FTP_MOREDATA) {
// Establish a new connection to FTP server
if(!isset($conn_id2)) {
$conn_id2 = ftp_connect($source_ftp_server);
$login_result2 = ftp_login($conn_id2, $source_ftp_user_name, $source_ftp_user_pass);
}
// Retreive size of uploaded file.
if(isset($conn_id2)) {
clearstatcache(); // <- this must be included!!
$remote_file_size = ftp_size($conn_id2, $remote_file);
}
// Calculate upload progress
$local_file_size = filesize($local_file);
if (isset($remote_file_size) && $remote_file_size > 0 ){
$i = ($remote_file_size/$local_file_size)*100;
printf("%d%% uploaded<br>", $i);
flush();
}
$ret = ftp_nb_continue($conn_id);
}
if ($ret != FTP_FINISHED) {
echo "<span style='color:red;'><b>There was an error uploading the file...</b></span><br>";
exit(1);
}
else {
echo "<br>Files successfully uploaded!<br><br>";
}
fclose($fp);
$fp=fopen($local_文件,'r');
$conn\u id=ftp\u connect($source\u ftp\u server);
$login\u result=ftp\u login($conn\u id、$source\u ftp\u user\u name、$source\u ftp\u user\u pass);
$ret=ftp\u nb\u fput($conn\u id,$remote\u file,$fp,ftp\u二进制文件);
而($ret==FTP\u MOREDATA){
//建立到FTP服务器的新连接
如果(!isset($conn_id2)){
$conn_id2=ftp_connect($source_ftp_server);
$login\u result2=ftp\u login($conn\u id2,$source\u ftp\u user\u name,$source\u ftp\u user\u pass);
}
//检索上载文件的大小。
if(isset($conn_id2)){
clearstatcache();//0){
$i=($remote_file_size/$local_file_size)*100;
printf(“%d%%上传
”,$i);
冲洗();
}
$ret=ftp\u nb\u continue($conn\u id);
}
如果($ret!=FTP\u完成){
echo“上传文件时出错…
”;
出口(1);
}
否则{
echo“
文件已成功上载!
”;
}
fclose($fp);
我去掉了一些不重要的部分,比如脚本中的附加信息等等
这段代码非常适用于将文件上载到其他服务器。但是,我还需要使用FTP从服务器下载文件
我真的很想使用与上面相同的代码,带有进度指示器等,但不确定如何修改此代码以下载文件而不是上载文件
它可能是一对夫妇的简单变化是所有需要的
这段代码中有没有特别需要更改的部分,或者这段代码在下载时的效果与在上传时的效果不一样
如果有人能给我指出解决这个问题的正确方向,我将不胜感激
它是否像将ftp_nb_fput命令更改为ftp_nb_get命令一样简单?我并不完全理解这些代码,因此很难判断需要更改什么
谢谢您的帮助。您正在寻找
ftp\u get
看起来应该使用如下内容:
$conn_id = ftp_connect($source_ftp_server);
$login_result = ftp_login($conn_id, $source_ftp_user_name, $source_ftp_user_pass);
$success = ftp_get($conn_id, $local_file, $server_file, FTP_BINARY);
以下是脚本,经过必要的修改,可以下载文件:
$fp = fopen($local_file2, 'w+');
$conn_id = ftp_connect($source_ftp_server);
$login_result = ftp_login($conn_id, $source_ftp_user_name, $source_ftp_user_pass);
$ret = ftp_nb_fget($conn_id, $fp, $remote_file2, FTP_BINARY);
while ($ret == FTP_MOREDATA) {
// Establish a new connection to FTP server
if(!isset($conn_id2)) {
$conn_id2 = ftp_connect($source_ftp_server);
$login_result2 = ftp_login($conn_id2, $source_ftp_user_name, $source_ftp_user_pass);
}
// Retreive size of source file.
if(isset($conn_id2)) {
clearstatcache(); // <- this must be included!!
$remote_file2_size = ftp_size($conn_id2, $remote_file2);
}
// Calculate download progress
$local_file2_size = filesize($local_file2);
if (isset($remote_file2_size) && $remote_file2_size > 0 ){
$i = ($local_file2_size/$remote_file2_size)*100;
printf("%d%% downloaded<br>", $i);
}
$ret = ftp_nb_continue($conn_id);
}
if ($ret != FTP_FINISHED) {
echo "<span style='color:red;'><b>There was an error downloading the file...</b></span><br>";
exit(1);
}
echo "<br>Files successfully downloaded!<br><br>";
fclose($fp);
$fp=fopen($local_file2,'w+');
$conn\u id=ftp\u connect($source\u ftp\u server);
$login\u result=ftp\u login($conn\u id、$source\u ftp\u user\u name、$source\u ftp\u user\u pass);
$ret=ftp\u nb\u fget($conn\u id,$fp,$remote\u file2,ftp\u二进制文件);
而($ret==FTP\u MOREDATA){
//建立到FTP服务器的新连接
如果(!isset($conn_id2)){
$conn_id2=ftp_connect($source_ftp_server);
$login\u result2=ftp\u login($conn\u id2,$source\u ftp\u user\u name,$source\u ftp\u user\u pass);
}
//检索源文件的大小。
if(isset($conn_id2)){
clearstatcache();//0){
$i=($local\u file2\u size/$remote\u file2\u size)*100;
printf(“%d%%下载
”,$i);
}
$ret=ftp\u nb\u continue($conn\u id);
}
如果($ret!=FTP\u完成){
echo“下载文件时出错…
”;
出口(1);
}
echo“
文件已成功下载!
”;
fclose($fp);
虽然我真的理解你寻求帮助的请求,但你现在应该意识到了(考虑到你的声誉),这不是为您完成工作的必要条件。这是为了帮助您编写不起作用的代码。遇到问题时,您无法根据自己尝试过的内容了解自己。因此,请尝试在web上搜索有关PHP FTP客户端的教程。从中学习并解决问题。然后,如果出现问题,您可以在此处提出问题。@SherwinFlight引用“提问,获得答案,不要分心”…你在这里并没有提出任何问题。你发布了一些与你想做的事情几乎无关的代码,并请某人为你解决所有问题。如果你完全被困在如何进行的问题上,并且明确知道你想做什么,我们可以给出一些建议。更好的是,如果你将问题缩小到一个特定的问题上,我们可以ld会提供一个很好的具体答案。相反,您发布了很多信息,但不清楚问题是什么以及我们如何帮助您。这是没有成效的。@SherwinFlight“我不太理解所有这些代码,因此很难判断需要更改什么。”在你的项目中使用代码之前,你真的应该理解它,如果只是为了确保它没有做你不想让它做的事情的话。另外,从别人帮助你的代码中赚钱并不是一件坏事。没有人(至少是体面的成员)这里会看不起你。最后,这是一项工作,谋生是完全正常的。这些是该特定函数的基本标志。如果函数返回FTP\u FAILED
,则表示上载失败。如果它返回FTP\u FINISHED
,则表示上载完成。如果它返回FTP\u MOREDATA
,这意味着上传仍在进行中(因此是while循环),它返回相同的值/标志,并且具有相同的含义。感谢您提供的帮助。从我的阅读来看,ftp_get命令似乎与ftp_nb_get命令类似,只是后者是非阻塞的。我想我只需要稍微处理一下它。我的主要问题是,我假设我的虽然循环也需要修改,因为它们最初是用于文件上传的。我以前从未使用过通过PHP的FTP,所以不确定所有函数如何工作。看起来只有一种方法可以解决这个问题