2012-06-29 22 views
0

我正在尝试将文件从一台服务器转移到另一台服务器。我使用PHP5,卷曲php cURL error已上传未对齐的文件大小

$fp = fopen("/tmp/help.txt", "r");  
$url = "ftp://admin:[email protected]: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:[email protected]: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 /。我将如何做到这一点?

+1

错误消息的哪一部分是你很难理解? – hakre

回答

-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; 


} 
+0

为什么downvote? – shorif2000

0

您是否有权限访问该目录?您是否尝试过使用标准FTP客户端登录到FTP服务器,然后切换到该目录?我很确定你不能通过FTP访问/ tmp目录。错误仅仅是传达给你。

您可以将该文件保存在您可从FTP登录访问的其他位置,然后运行该脚本。您还可以查看SFTP并查看是否有用户访问该文件夹的选项。

+0

你的权利,我通过FTP登录作为广告,它不让我改变任何目录。我如何做到这一点,这是可能的? – shorif2000

+0

@sharif你不能那样做。 FTP只允许您访问服务器的有限部分。你将不得不与服务器管理员交谈,讨论你的情况,看看他是否可以推荐一些东西。 –

+0

@Malik我需要在服务器配置上做些什么改变才能允许我? – shorif2000