1

我正在尝试通过 ftp 将 zip 文件从一台服务器传输到我的服务器,以便我可以使用文件中的数据来更新我的数据库表。这是我的 ftp.php 文件:

    <?php
header('Content-type: text/html; charset=utf-8');
$date = "2013-05-21-11-19-40";
$ftp_server="ftp.server.com";
$ftp_user_name="BookCellar";
$ftp_user_pass="*****";
$file = "/reports/other/compreport_abebooks_" .$date. ".zip";//tobe uploaded
$remote_file = "/chroot/home/bookcellaronline.com/html/testbcos/accounting/compreport_abebooks_" .$date. ".zip"; 

?>

我的 ftpUpload.php 文件是:

    <?php
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($file));
header('Content-Type: application/zip');
require_once('ftp.php');

// set up basic connection
$conn_id = ftp_ssl_connect($ftp_server);//ftp_connect

// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
ftp_pasv($conn_id, true);
// check connection
if ((! $conn_id ) || (! $login_result )) {
echo "FTP connection has failed!" ;
exit;

} else {
echo "Connected for user $ftp_user_name" ;
}

ftp_chdir($conn_id, '/home/bookcell/bookcellaronline.com/html/testbcos/accounting/');

// upload a file
if (ftp_put($conn_id, $remote_file, $file, FTP_BINARY)) {
echo "successfully uploaded $file\n";
exit;
} else {
echo "There was a problem while uploading $file\n";
exit;
}
echo $php_errormsg;
// close the connection
ftp_close($conn_id);
?>

当我运行这些时,我收到错误消息:

    [<a href='function.ftp-put'>function.ftp-put</a>]: failed to open stream: No such file or directory in /chroot/home/bookcell/bookcellaronline.com/html/testbcos/accounting/ftpUpload.php on line 25

第 25 行是:

    if (ftp_put($conn_id, $remote_file, $file, FTP_BINARY)) {

我研究了一堆关于 SO 的其他帖子,但没有找到解决方案。我的连接有效,但我无法传输文件。我如何(如果可能)将其传输到我的服务器?

编辑:我是否错过了我不仅需要连接到他们的服务器($file)和我的服务器($remote_file)的事实????

4

3 回答 3

2

您不能放置目标文件的路径

$remote_file = "/chroot/home/bookcellaronline.com/html/testbcos/accounting/compreport_abebooks_" .$date. ".zip";

例如 - 这不起作用

ftp_put($conn, '/www/site/file.html','c:/wamp/www/site/file.html',FTP_BINARY);

你必须把

<?php
ftp_chdir($conn, '/www/site/');
ftp_put($conn,'file.html', 'c:/wamp/www/site/file.html', FTP_BINARY ); 

一个 FTP 服务器隐藏了他的绝对路径/home/bookcell/bookcellaronline.com/html/

所有文件夹必须相对于root

ftp_chdir($conn_id, '/testbcos/accounting/');

测试 ftp_chdir 的结果!您在正确的目录中吗?

echo ftp_pwd($conn_id);

尝试通过浏览器连接到 FTP 服务器。

ftp://BookCellar@ftp.server.com

你得到的/root. 您在浏览器中看到的文件夹和文件位于root目录下方。

更新:一个开箱即用的例子。

$password =行必须替换为下载通行证

FTP文件

<?php
    $password = "????";
    $resource = ftp_connect('ftp.strato.com');
    $login = ftp_login($resource, 'ftp_mx_all@moskito-x.de', $password);
    $list = ftp_rawlist($resource, '/');
    print_r($list);
?>

你会得到 print_r

Array ( [0] => drwxr-xr-x 2 ftp ftp 4096 May 23 20:15 aFolder [1] => -rw-r--r-- 1 ftp ftp 167 May 23 20:25 tutorial.txt )

我们可以看到有一个文件夹aFolder和一个文件tutorial.txt
我们很感兴趣文件夹中有哪些文件aFolder
所以将 $list = 替换为

$list = ftp_rawlist($resource, '/aFolder');

并再次运行 php 脚本。输出 :

Array ( [0] => drwxr-xr-x 3 ftp ftp 4096 May 23 19:24 .. [1] => -rw-r--r-- 1 ftp ftp 167 May 23 20:25 tutorial.txt [2] => -rw-r--r-- 1 ftp ftp 271 May 23 21:16 tutorial.zip )

现在我们要下载aFolder/tutorial.txt.
在下面添加以下内容print_r($list);

     echo "<br />\n";
     $local_file = "tmp.txt" ;
     $file = ftp_get($resource, $local_file, '/aFolder/tutorial.txt',FTP_ASCII);
      if ($file) {
         echo "$local_file has been successfully written\n";
     } else {
         echo "An error has occurred\n";
     }

输出 :

在此处输入图像描述

php 脚本所在的文件夹已更改。

在此处输入图像描述

现在有一个新文件tmp.txt

如果你带上这个小脚本来运行。我们可以走得更远。

从我们的聊天中:
您的服务器不允许对 url 进行 ftp 调用。

allow_url_fopen = ON

echo ini_get('allow_url_fopen');

if (!ini_get('allow_url_fopen')) {
    ini_set('allow_url_fopen', 1);
}

echo ini_get('allow_url_fopen'); 

然后再试一次。

于 2013-05-22T17:40:47.623 回答
2
set_time_limit(0);
exec("wget --continue http://example.com/site.zip");
exit;
于 2018-04-05T04:26:33.327 回答
0

在第一个摘录中,将远程磁贴更改为

`$remote_file = "compreport_abebooks_" .$date. ".zip";`

在 put 之前,您将更改为目录。

另请注意,您在ftp_chdir调用中引用的目录与顶部引用的 $remote_file 中的目录不同。

 /home/bookcell/bookcellaronline.com/html/testbcos/accounting/

对比

 /chroot/home/bookcellaronline.com/html/testbcos/accounting/
于 2013-05-22T17:06:44.127 回答