0

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

4

3 回答 3

0

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

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

于 2012-06-29T15:58:09.223 回答
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__
于 2018-09-24T11:23:44.190 回答
-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;


}
于 2012-07-17T16:46:46.527 回答