【问题标题】:php cURL error Uploaded unaligned file sizephp cURL错误上传未对齐的文件大小
【发布时间】:2018-09-24 19:23:44
【问题描述】:

我正在尝试将文件从一台服务器传输到另一台服务器。我正在使用带有 curl 的 php5

$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/。我该怎么做?

【问题讨论】:

  • 错误信息的哪一部分让你难以理解?

标签: php curl centos


【解决方案1】:

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

您可以将该文件保存在您可以通过 FTP 登录访问的其他位置,然后运行该脚本。您还可以查看 SFTP,看看对于有权访问该文件夹的用户是否适合您。

【讨论】:

  • 你的权利,我通过 ftp 作为广告登录,它不允许我更改任何目录。我怎样才能做到这一点?
  • @sharif 你不能那样做。 FTP 只允许您访问服务器的有限部分。您必须与服务器管理员交谈并讨论您的情况,看看他是否可以推荐一些东西。
  • @Malik 我必须对服务器配置进行哪些更改才能允许我?
  • 我已经设法通过命令行解决了这个问题,但它不能通过 php curl 工作。我禁用了 chroot,现在我可以通过 ftp 登录并更改目录。当我使用 curl 作为脚本运行时,我仍然得到同样的错误。
  • 如果我将 url 更改为 $url = "ftp://admin:support@portal-test.uk.xxx.com:21/help.txt"; 我得到 curl 错误:18。 cURL error:Uploaded unaligned file size (6 out of 1197 bytes)
【解决方案2】:

由于提供了错误的文件大小,您收到错误 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__

【讨论】:

    【解决方案3】:

    这是我的有效脚本

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      相关资源
      最近更新 更多