2012-06-29 19 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