使用CURL和PHP上传文件到远程服务器的FTP,但上传的是一个空文件。

7

我想要将一个文件上传到远程服务器,但源文件好像没有起到作用。在服务器上得到的只是一个空文件。 我的代码如下:

<?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); 

?>

尝试使用 echo curl_errno($ch); 查看是否有任何错误。 - safarov
尝试了一下,得到了0,那这意味着什么? - Dudipoli
SERVERPATH的格式是什么?例如,只更改主机名,但保留所有其他内容、标点符号等。 - dldnh
1
这是主机路径:ftp.ans.projects.jce.ac.il/public_ftp/incoming/file.txt。我认为它是正确的,因为当我打开文件管理系统时,我可以看到一个文件,但它是空白的。 - Dudipoli
1个回答

30

经过两天的不懈努力,我终于做到了……方法如下:

<?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;  
?> 

这是我找到解决方案的来源


嗨,我给了一个+1,因为没有CURLOPT_UPLOAD = 1这个选项,它会在服务器上上传空文件,我正在尝试上传到Nextcloud。 - Jimmmy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接