【问题标题】:Upload the file to the FTP server over HTTPS using curl in php使用 php 中的 curl 通过 HTTPS 将文件上传到 FTP 服务器
【发布时间】:2017-04-30 14:43:45
【问题描述】:

我正在尝试将数据 [可以是文本或 zip] 上传到 ftp 站点。 由于我们在环境中有代理,所以我决定使用 curl 上传数据。在我开始设置代理服务器设置之前,我在没有代理的环境中测试脚本。

我关注了:- FTP upload file to distant server with CURL and PHP uploads a blank file

但是,我无法上传文件。

链接在哪里,我想上传是这种格式:- https://fp.emc.com/.....

有谁知道,如何使用 PHP 的 curl 函数通过 https 将文件上传到 ftp 服务器?

<?php
$sendTo = 'https://ftp.emc.com/....?domain=XX&user=XXX&password=XXX'; 
$localfile ="23.txt";
$fp = fopen($localfile, 'r');
// Create CURL Connection 
$ch = curl_init(); 
//curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_USERPWD, "usr:passwd"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_FAILONERROR, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_URL, $sendTo); 
//curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile));
echo $ch;
$m=curl_exec ($ch);
echo "m $m<br>";
    $error_no = curl_errno($ch);
    echo "error_no $error_no<br>";
    curl_close ($ch);
        if ($error_no == 0) {
            $error = 'File uploaded succesfully.';
        } else {
            $error = 'File upload error.';
        }
echo $error;
?>

【问题讨论】:

  • 尝试使用CURL POST 而不是GET。只需将此添加到您的 curl 选项中:curl_setopt($ch, CURLOPT_POST, 1);
  • 是的,我添加了 $fields="domain=xXX&username=XX&password=XX"; curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);仍然无法正常工作,stackOver 流程​​中充满了 ftp:\\ftp.example.com 但是,我正在使用 https:\\ftp.example.com
  • 您不能使用 HTTP(S) 上传到 FTP 服务器。如果它使用 HTTP(S) 进行上传,它就不是 FTP 服务器。请说清楚,你要求什么。
  • 我可以使用 ftp_put 上传文件,但是我必须将脚本上传到使用代理服务器无法访问外部工作的环境,因此我必须消除 ftp_put 选项。使用 curl,我们可以提及代理详细信息。 ftp.emc.com 在浏览器中打开? - 是的,可以上传文件。在浏览器中:链接看起来像这样 https:\\ftp.emc.com\....?domain=XX&user=XX&password=XXX 当我尝试在上述 ftp 链接上上传文件时,我遇到了问题。
  • 以上代码,我用的是上传到ftp.emc.com,get和post都试过了。

标签: php curl file-upload https ftp


【解决方案1】:

试试这个:

$fp = fopen($filepath, 'r');

$ftp_url = "ftp://user:password@ftpserver:21/" . $filename;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $ftp_url);
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($filepath));
curl_setopt($ch, CURLOPT_PROXY, $proxy_server_ip);
curl_setopt($ch, CURLOPT_PROXYPORT, $proxy_server_port);
curl_setopt($ch, CURLOPT_PROXYTYPE, 'HTTP');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxy_login);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_exec($ch);
curl_close($ch);

它对我有用。

【讨论】:

  • 我使用了相同的代码,但它不起作用,但是我从未引入 CURLOPT_PROXYUSERPWD 的唯一参数,因为当时我们在 WEB 浏览器上应用代理时,我们没有指定任何代理用户密码。你能帮我解释一下 CURLOPT_PROXYUSERPWD 选项吗?这样我就可以在有问题的脚本中引入。
  • 奇怪这个curl_errno也是0,但是访问FTP链接时却没有上传
  • CURLOPT_PROXYUSERPWD 包含 $proxy_user.":".$proxy_pass 字符串。
猜你喜欢
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多