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

我一直在使用一段漂亮的PHP代码通过cURL将file upload到FTP。 它直到今天一直很好。

当我执行它时,它会返回一个curl错误#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; ?> 

尝试使用CURLOPT_USERPWD选项来设置授权凭证,而不是在URL中传递。

例如

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

另外(取自这里 ),你可以尝试百分比编码的身份验证凭据:

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

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

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