【发布时间】:2014-07-01 09:45:36
【问题描述】:
我正在尝试将文本文件上传到亚马逊 FTP 站点(用于亚马逊产品广告)。
我想使用 PHP 和 cURL,因为我知道我可以使用 cURL 对我们使用的另一台主机进行 FTP-ing,并且我想使用相同的代码(所以我不想使用 phpseclib)。我很确定 cURL 应该能够做到这一点。
我有来自亚马逊的连接详细信息(用户名、密码和主机地址),我知道这些信息 100% 有效,因为我使用 FileZilla 进行连接并且一切正常,而且我在我的 cURL 中使用相同的连接详细信息代码。
这是我的代码:
$ftp_username = 'xxxx';
$ftp_password = 'xxxx';
$ftp_url = 'dar-eu.amazon-digital-ftp.com';
$localfile = 'feeds/amazon-gifts.txt';
$remotefile = 'amazon-gifts.txt';
$ch = curl_init();
$fp = fopen($localfile,'r');
curl_setopt($ch, CURLOPT_URL, 'sftp://'.$ftp_username.':'.$ftp_password.'@'.$ftp_url.'/'.$remotefile);
curl_setopt($ch, CURLOPT_UPLOAD, true);
curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile));
curl_exec ($ch);
if (curl_errno($ch) == 0) {
echo 'File uploaded succesfully.';
} else {
echo 'File upload error. '.curl_errno($ch).' - '.curl_error($ch);
}
curl_close($ch);
我没有在这里指定端口号,因为我也没有使用 FileZilla。但是我已经尝试了 22 和 21, 22 工作,我得到下面的错误,并且 21 说could not connect。所以我很确定上面的代码可以连接到服务器。
我得到的错误信息是:
9 - Upload failed: Permission denied (3/-31)
就像我说的,我在 FileZilla 和 cURL 中使用相同的连接细节,而且 FileZilla 正常工作,没有错误,没有权限被拒绝消息。
我已经联系了亚马逊支持,他们说因为使用 FileZilla 连接没有问题,所以问题一定是我的代码。
谁能帮忙..?我是否错过了我应该设置的选项..?
更新
来自日志:
* About to connect() to dar-eu.amazon-digital-ftp.com port 22 (#0)
* Trying 46.137.126.98... * connected
* Connected to dar-eu.amazon-digital-ftp.com (46.137.126.98) port 22 (#0)
* SSH authentication methods available: publickey,password
* Using ssh public key file id_dsa.pub
* Using ssh private key file id_dsa
* SSH public key authentication failed: Unable to open public key file
* Initialized password authentication
* Authentication complete
* Upload failed: Permission denied (3/-31)
* Connection #0 to host dar-eu.amazon-digital-ftp.com left intact
* Closing connection #0
所以它显然使用密码完成了身份验证。
有什么想法吗?
【问题讨论】:
-
不知道是否有帮助,但是您尝试过这里提供的验证码吗?stackoverflow.com/questions/9906555/…
-
抱歉,我在该页面或它链接到的页面上看不到任何有关授权码的信息...您发布了正确的链接吗..?
-
我的意思是将 CURLOPT_USERPWD 与 CURLOPT_URL 分开
-
哦,我明白了...我已经尝试过了,没有任何区别...正如您从上面的日志更新中看到的密码验证正在工作。
-
服务器上的目标文件夹怎么样?您应该使用 chmod 检查该目录是否为只读。您可以上传到与 FileZilla 相同的(根)文件夹吗?