通过PHP的cURL将文件上传到FTP,错误,因为密码包含'<'字符

时间:2012-03-06 11:10:51

标签: php linux curl ftp

我一直在使用一段漂亮的PHP代码通过cURL将文件上传到FTP。 它一直很好,直到今天。

执行时会返回卷曲错误#3 解释错误:CURLE_URL_MALFORMAT(3):URL格式不正确。 我认为这是因为密码包含特殊字符。 密码包含'<' 例如R3lHK2A9&。1 此代码适用于过去,密码全部只包含字母和数字。

我尝试使用escapeshellarg()urlencode()escapeshellcmd()密码....徒劳无功。我错过了什么吗?

你能帮帮忙吗?

    <?php
    $ch = curl_init();
    $localfile = “test.tar”;
    $fp = fopen($localfile, ‘r’);

    curl_setopt($ch, CURLOPT_URL, ‘ftp://username:password@ftp.domain.com/public_html/filesfromscript/’.$localfile);
    curl_setopt($ch, CURLOPT_UPLOAD, 1);
    curl_setopt($ch, CURLOPT_INFILE, $fp);
    curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile));

    curl_exec ($ch);
    $error_no = curl_errno($ch);
    curl_close ($ch);

    if ($error_no == 0) {
    $message = ‘File uploaded successfully.’;
    } else {
    $message = “File upload error: $error_no. Error codes explained here http://curl.haxx.se/libcurl/c/libcurl-errors.html”;
    }
    echo $message;
    ?>

2 个答案:

答案 0 :(得分:6)

尝试使用CURLOPT_USERPWD选项设置身份验证凭据,而不是在URL中传递。

E.g。

curl_setopt($ch, CURLOPT_URL, 'ftp://ftp.domain.com/public_html/filesfromscript/'.$localfile);
curl_setopt($ch, CURLOPT_USERPWD, 'username:pass<word');

另外(取自here)您可以尝试对auth凭证进行百分比编码:

$username = 'username';
$password = 'pass<word';
curl_setopt($ch, CURLOPT_URL, 'ftp://'.rawurlencode($username).':'.rawurlencode($password).'@ftp.domain.com/public_html/filesfromscript/'.$localfile);

答案 1 :(得分:1)

您可以尝试使用CURLOPT_USERPWD选项设置登录/通过:

curl_setopt(CURLOPT_USERPWD, '[username]:[password]')