如何用curl将文件上传到目标目录?

时间:2015-07-04 13:40:03

标签: php curl

我的本​​地计算机中有一个文件"/home/test.mp4"

我想将其上传到/var/www/ok.mp4(上传时名称已更改)。所有源文件和目标文件都在本地计算机中。

如何修复我的部分代码,添加内容或更改某些内容?

<?php

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); 
curl_exec($ch);

?>

想想Ram Sharma,代码改变如下:

<?php
$request = curl_init('http://127.0.0.1/');
curl_setopt($request, CURLOPT_POST, true);
curl_setopt(
    $request,
    CURLOPT_POSTFIELDS,
    array(
      'file' => '@' . realpath('/home/test.mp4')
    ));
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
echo curl_exec($request);
// close the session
curl_close($request);
?>

出现错误消息:

它有效!
这是此服务器的默认网页 Web服务器软件正在运行,但尚未添加任何内容。

我用ftp_put测试,code1工作正常。

代码1:

<?php
    set_time_limit(0);
    $host = 'xxxx';
    $usr = 'yyyy';
    $pwd = 'zzzz';
    $src = 'd:/upload.sql';
    $ftp_path = '/public_html/';
    $des = 'upload_ftp_put.sql';
    $conn_id = ftp_connect($host, 21) or die ("Cannot connect to host");
    ftp_login($conn_id, $usr, $pwd) or die("Cannot login");
    $upload = ftp_put($conn_id, $ftp_path.$des, $src, FTP_ASCII); 
    print($upload);
?>

我的本​​地电脑中的文件d:/upload.sql可以使用code1上传到my_ftp_ip/public_html/upload_ftp_put.sql 现在我用curl将它重新编写成code2。

码2:

<?php
  set_time_limit(0);
  $ch = curl_init();
  $host = 'xxxx';
  $usr = 'yyyy';
  $pwd = 'zzzz';
  $src = 'd:/upload.sql';
  $ftp_path = '/public_html';
  $dest = 'upload_curl.sql';
  $fp = fopen($src, 'r');
  curl_setopt($ch, CURLOPT_URL, 'ftp://user:pwd@host/'.$ftp_path .'/'. $dest);
  curl_setopt($ch, CURLOPT_UPLOAD, 1);
  curl_setopt($ch, CURLOPT_INFILE, $fp);
  curl_setopt($ch, CURLOPT_INFILESIZE, filesize($src));
  curl_exec ($ch);
  $error_no = curl_errno($ch);
  print($error_no);
  curl_close ($ch);
?>

错误信息输出为6.为什么无法使用curl将我的本地文件上传到ftp?如何解决?

6 个答案:

答案 0 :(得分:8)

使用copy()

copy('/home/test.mp4', '/var/www/ok.mp4');

当通过文件系统在本地完成操作时,在任何协议(HTTP,FTP,...)上运行文件通过网络堆栈(这是cURL所做的)是没有意义的。使用网络更复杂,更容易出错。

答案 1 :(得分:3)

这是一个低级错误。

curl_setopt($ch, CURLOPT_URL, "ftp://$usr:$pwd@$host$ftp_path/$dest");

答案 2 :(得分:1)

尝试这样的事情,我感觉不是服务器目录路径,而是http url。

// initialise the curl request
$request = curl_init('http://example.com/');
// send a file
curl_setopt($request, CURLOPT_POST, true);
curl_setopt(
    $request,
    CURLOPT_POSTFIELDS,
    array(
      'file' => '@' . realpath('test.txt')
    ));

// output the response
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
echo curl_exec($request);
// close the session
curl_close($request);

答案 3 :(得分:1)

此代码可能对您有所帮助:

      $markers.each(function(index){ 
          add_marker( $(this), map );
          if(!index){
             google.maps.event.trigger(map.markers[0],'click');
          }
      });

答案 4 :(得分:0)

尝试指定像这样发送的文件的MIME类型

curl_setopt(
    $request,
    CURLOPT_POSTFIELDS,
    array(
       'file' => '@' . realpath('/home/test.mp4') . ';type=video/mp4'
    ));

答案 5 :(得分:0)

您发布的代码是针对客户端的。如果要使用HTTP上载文件,则HTTP服务器必须能够处理此上载请求并将文件保存到所需的位置。 “错误消息”可能是服务器的默认网页。

PHP中的服务器端代码示例,供您参考:

<?php
if ($_FILES) {
    $filename = $_FILES['file']['name'];
    $tmpname = $_FILES['file']['tmp_name'];
    if (move_uploaded_file($tmpname,'/var/www/ok.mp4')) {
        print_r('ok');
    } else {
        print_r('failure');
    }
}