cURL上传文件到FTP服务器和上传文件到HTTP服务器有一些差别,在PHP中通过cURL将文件上传到FTP器时,CURLOPT_URL必须包含文件上传到FTP指定目录后存储时使用的文件名,而不能直接将CURLOPT_URL设置为保存上传文件的目录路径。当CURLOPT_URL设置成一个目录而不包含文件名时,在cURL执行请求以后调用curl_error()会出现Uploading to a URL without a file name!的错误信息。
以下代码为PHP cURL上传文件到FTP服务器的正确示范。
请注意USER:PASSWORD冒号前后分别是登录FTP服务器所使用的用户名和登录密码,除了通过CURLOPT_USERPWD指定用户名和登录密码以外,也可以直接按照ftp://USERNAME:PASSWORD@www.wuxiancheng.cn/books/的格式将用户名和登录密码写到FTP链接中去。
如果PHP版本低于7.1,并且操作系统是Windows,并且脚本代码是UTF-8,并且文件名或者文件路径名包含中文等非英文字符,需要将文件名和文件路径转成GBK,否则PHP无法读取文件。
- <?php
- $ch = curl_init();
- $filepath = 'D:\Web\www\wuxiancheng.cn\wuxiancheng.txt';
- $basename = pathInfo($filepath, PATHINFO_BASENAME);
- $filesize = filesize($filepath);
- curl_setopt_array(
- $ch,
- array(
- CURLOPT_URL => 'ftp://www.wuxiancheng.cn/books/' . $basename,
- CURLOPT_USERPWD => 'USER:PASSWORD',
- CURLOPT_PROTOCOLS => CURLPROTO_FTP,
- CURLOPT_UPLOAD => true,
- CURLOPT_INFILE => $filepath,
- CURLOPT_INFILESIZE => $filesize,
- CURLOPT_RETURNTRANSFER => true,
- CURLOPT_HEADER => false,
- )
- );
- curl_exec($ch);
- $message = curl_errno($ch) === CURLE_OK ? 'success' : 'failure';
- echo $message;
- ?>
复制代码 |
|