我正在尝试通过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)????答案 0 :(得分:2)
您无法将路径放到目标文件
$remote_file = "/chroot/home/bookcellaronline.com/html/testbcos/accounting/compreport_abebooks_" .$date. ".zip";
e.g。 - 这不起作用
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 =
行必须替换为Download pass
ftp.php
<?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 = 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');
然后再试一次。
答案 1 :(得分:2)
set_time_limit(0);
exec("wget --continue http://example.com/site.zip");
exit;
答案 2 :(得分:0)
在第一个摘录中将远程磁贴更改为
`$remote_file = "compreport_abebooks_" .$date. ".zip";`
在你进入目录之前的。
另请注意,您在ftp_chdir
调用中引用的目录与顶部引用的$ remote_file中的目录不同。
/home/bookcell/bookcellaronline.com/html/testbcos/accounting/
vs
/chroot/home/bookcellaronline.com/html/testbcos/accounting/