我正在尝试将文件从一台服务器传输到另一台服务器。我正在使用php5 with curl
$fp = fopen("/tmp/help.txt", "r");
$url = "ftp://admin:support@portal-test.uk.xxx.com:21/tmp/help.txt";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILE, $fp);
//curl_setopt($ch, CURLOPT_FTPASCII, 1);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize(__FILE__));
$result = curl_exec($ch);
print_r(curl_getinfo($ch));
echo "\n\ncURL error number:" .curl_errno($ch);
echo "\n\ncURL error:" . curl_error($ch);
curl_close($ch);
我收到如下错误:
Array
(
[url] => ftp://admin:support@portal-test.uk.xxx.com:21/tmp/help.txt
[content_type] =>
[http_code] => 550
[header_size] => 0
[request_size] => 0
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0.033012
[namelookup_time] => 0.015422
[connect_time] => 0.015798
[pretransfer_time] => 0
[size_upload] => 0
[size_download] => 0
[speed_download] => 0
[speed_upload] => 0
[download_content_length] => 0
[upload_content_length] => 0
[starttransfer_time] => 0
[redirect_time] => 0
)
cURL error number:9
cURL error:Server denied you to change to the given directory
我想将文件从/ tmp /传输到另一台服务器/ tmp /。我该怎么做?
答案 0 :(得分:0)
您是否有权访问该目录?您是否尝试使用标准FTP客户端登录FTP服务器,然后切换到该目录?我很确定你无法通过FTP访问/ tmp目录。错误只是传达给你。
您可以将该文件保存在FTP登录可访问的其他位置,然后运行该脚本。您还可以查看SFTP,看看这是否是一个用户可以访问该文件夹的选项。
答案 1 :(得分:0)
由于提供了错误的文件大小,您收到错误cURL error:Uploaded unaligned file size (6 out of 1197 bytes)
:
$fp = fopen("/tmp/help.txt", "r");
// ...
curl_setopt($ch, CURLOPT_INFILESIZE, filesize("/tmp/help.txt")); // XXX: was __FILE__
答案 2 :(得分:-1)
这是我的脚本
<?php
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);
date_default_timezone_set('Europe/London');
set_include_path('.' . PATH_SEPARATOR . '/opt/eposdatatransfer/application/../library' . PATH_SEPARATOR . get_include_path());
require('Zend/Date.php');
$use_pasv = true;$ftp_server = "172.16.0.65";
$ftp_user_name = "h3111142";
$ftp_user_pass = "seismic";
$ftp_remote_path = "/tmp";
$ftp_remote_file = array("/files/nas1/epos4/eposbulk/h3111142/seismic/Line_58/0000000500900bc1.000000.00000005.headers","/files/nas1/epos4/eposbulk/h3111142/seismic/Line_58/0000000500900bc1.000000.00000005.headers.ext0","/files/nas1/epos4/eposbulk/h3111142/seismic/Line_58/0000000500900bc1.000000.00000005.history","/files/nas1/epos4/eposbulk/h3111142/seismic/Line_58/0000000500900bc1.000000.00000005.pds","/files/nas1/epos4/eposbulk/h3111142/seismic/Line_58/0000000500900bc1.000000.00000005.pkey","/files/nas1/epos4/eposbulk/h3111142/seismic/Line_58/0000000500900bc1.000000.00000005.traces","/files/nas1/epos4/eposbulk/h3111142/seismic/Line_58/0000000500900bc1.000000.00000005.traces.ext0",) ;
$ftp_local_file = array(59,59,59,59,59,59,59,) ;
$emailNotifications = array();
$GLOBALS['start']="";
$GLOBALS['current']="";
date_default_timezone_set ( "Europe/London" );
$conn_id = ftp_connect($ftp_server);
if (!$conn_id){
echo "Unable to connect to $ftp_server";
updateStatus($ftp_local_file[$count], 0);
exit(1);
}
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if (!$login_result){
echo "Inavalid login/password for $ftp_user_name on $ftp_server";
updateStatus($ftp_local_file[$count], 0);
ftp_close($conn_id);
exit(2);
}
ftp_pasv($conn_id, $use_pasv);
if (!ftp_chdir($conn_id, $ftp_remote_path)){
echo "Invalid remote path $ftp_remote_path";
ftp_close($conn_id);
updateStatus($ftp_local_file[$count], 0);
exit(3);
}
$count = 0;
foreach($ftp_remote_file as $key => $value){
updateStatus($ftp_local_file[$count], 2);
if(!empty($value)){
if (ftp_put($conn_id, $value, $value, FTP_BINARY)){
updateStatus($ftp_local_file[$count], 1);
}else{
$use_pasv = false;
ftp_pasv($conn_id, $use_pasv);
if (ftp_put($conn_id, $value, $value, FTP_BINARY)){
updateStatus($ftp_local_file[$count], 1);
}else{
updateStatus($ftp_local_file[$count], 0);
ftp_close($conn_id);
echo "Error while uploading $value";
exit(4);
}
}
}
$count++;
}
ftp_close($conn_id);
$GLOBALS['current'] = null;
sendmail($emailNotifications,$ftp_remote_file, $ftp_local_file);
function updateStatus($id, $status){
$con = mysql_connect('hero','eposdata','support');
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db('eposdatatransfer', $con);
//$mysqldate = date( 'Y-m-d H:i:s');
$mysqldate = new Zend_Date();
if($status == 2){
if($GLOBALS['current']==$id){
return;
}else{
$GLOBALS["current"] = $id;
}
$GLOBALS['start'] = $mysqldate;
$mysqldate = new Zend_Date($mysqldate, Zend_Date::ISO_8601);
$start = $mysqldate->toString('Y-MM-dd HH:mm:ss');
//echo $start;
mysql_query("UPDATE queue SET status=$status, started='$start' WHERE id=$id");
}elseif($status == 1){
$dateDiff = ($mysqldate->getTimestamp() - $GLOBALS['start']->getTimestamp()) ;
$complete = $mysqldate->toString('Y-MM-dd HH:mm:ss');
mysql_query("UPDATE queue SET status=$status, completed='$complete', duration='$dateDiff' WHERE id=$id");
}else{
mysql_query("UPDATE queue SET status=$status WHERE id=$id");
}
mysql_close($con);
}
function sendmail($emailNotifications, $ftp_remote_file, $idArr){
$message = "";
$count = 0;
$data = array();
foreach($ftp_remote_file as $key => $value){
if($GLOBALS['current']==$idArr[$count]){
//return;
}else{
$GLOBALS['current'] = $idArr[$count];
$data = getLineName($idArr[$count]);
$message = $message . $data['data_name'] . "
";
}
$count++;
}
$message = $message . "
Downloaded to Woking" ;
$message = $message . "
This is an automated message. DO NOT REPLY";
// In case any of our lines are larger than 70 characters, we should use wordwrap()
$message = wordwrap($message, 70);
//Send
foreach($emailNotifications as $key => $value){
mail("$value", 'Transfer Complete Line: ' . $data['line_name'], $message);
}
}
function getLineName($id){
$con = mysql_connect('hero','eposdata','support');
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db('eposdatatransfer', $con);
$result = mysql_query("select * from queue WHERE id=$id");
$row = mysql_fetch_assoc($result);
return $row;
}