php cURL error上传未对齐的文件大小

时间:2012-06-29 15:20:04

标签: php curl centos

我正在尝试将文件从一台服务器传输到另一台服务器。我正在使用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 /。我该怎么做?

3 个答案:

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


}