2012-03-28 71 views
4

我想上传文件到远端服务器,但看起来像源文件什么都不做。我所得到的只是服务器上的空白文件。 我的代码是这样的:FTP上传文件到远程服务器与CURL和PHP上传空白文件

<?php 

    $c = curl_init(); 
    $file = "\PATHTOFILE\file.txt"; 
    $fp = fopen($file, "r"); 

    curl_setopt($c, CURLOPT_URL, "SERVERPATH/file.txt"); 
    curl_setopt($c, CURLOPT_USERPWD, "USER:PASSWORD"); 
    curl_setopt($c, CURLOPT_UPLOAD, 1); 
    curl_setopt($c, CURLOPT_INFILE, $fp); 
    curl_setopt($c, CURLOPT_INFILESIZE, filesize($file)); 

    curl_exec($c); 
     echo "Success"; 
    curl_close($c); 
    fclose($fp); 

?> 
+0

尝试'echo curl_errno($ ch);'看看是否有任何错误 – safarov 2012-03-28 11:36:11

+0

尝试它并得到0,现在它是什么意思? – Dudipoli 2012-03-28 12:42:59

+0

SERVERPATH的格式是什么?即只改变主机名,但留下所有其他的东西,标点符号等。 – dldnh 2012-03-28 19:43:15

回答

17

2天后敲我的头靠在键盘的。最后我做到了.. 方法如下:

<?php 

    if (isset($_POST['Submit'])) { 
if (!empty($_FILES['upload']['name'])) { 
    $ch = curl_init(); 
    $localfile = $_FILES['upload']['tmp_name']; 
    $fp = fopen($localfile, 'r'); 
    curl_setopt($ch, CURLOPT_URL, 'ftp://domain.com/'.$_FILES['upload']['name']); 
    curl_setopt($ch, CURLOPT_USERPWD, "user:pass"); 
    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) { 
      $error = 'File uploaded succesfully.'; 
     } else { 
      $error = 'File upload error.'; 
     } 
} else { 
     $error = 'Please select a file.'; 
} 
} 
    echo $error; 
?> 

这里是source,从那里我发现解决方案

+0

嗨,我给+1,因为CURLOPT_UPLOAD = 1没有这个curlopt它真的上传服务器上的空文件,我试图上传到下一个云端 – Jimmmy 2017-03-31 09:40:51