You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP cURL从本地上传文件到远程服务器失效问题求助

排查解决步骤

  • 检查目录权限与存在性
    首先确认远程服务器根目录下存在tmp文件夹,且文件夹权限设置为755(部分免费主机禁止777权限,不要强行设置777),同时确认文件夹所有者与PHP运行用户一致。
  • 验证PHP配置限制
    在远程服务器根目录新建phpinfo.php,写入代码:
    <?php phpinfo(); ?>
    
    访问该文件检查以下配置项:
    • file_uploads 值为 On
    • upload_max_filesize 大于你要上传的文件大小
    • post_max_size 大于你要上传的文件大小
    • open_basedir 没有限制当前站点根目录的写入权限
      验证完成后删除phpinfo.php避免泄露服务器信息。
  • 添加上传错误日志排查
    修改receive.php顶部增加错误输出,同时给文件移动逻辑增加判断:
    <?php
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    if(isset($_POST['sender']))
    {
      echo "got it !<br>";
      // 改用绝对路径避免相对路径解析错误
      $file_name = __DIR__."/tmp/".$_POST['sender']."-".$_FILES['file']['name'];
      // 先输出文件上传错误码排查问题
      echo "上传错误码:".$_FILES['file']['error']."<br>";
      if(move_uploaded_file($_FILES['file']['tmp_name'], $file_name)){
        echo "Successful Attempt! <br><br>Filename: ".$file_name;
        echo '<br><br> <img src="'.$file_name.'" width="300px"></img>';
      }else{
        echo "文件移动失败,错误详情:".print_r(error_get_last(),true);
      }
    }
    else
    {
      echo 'Unauthorized Access!';
    }
    ?>
    
    PHP上传错误码对应问题:
    1:文件大小超过php.ini的upload_max_filesize限制
    2:文件大小超过表单提交的MAX_FILE_SIZE限制
    3:文件仅部分上传
    4:没有文件被上传
    6:找不到服务器临时目录
    7:文件写入磁盘失败
    8:PHP扩展阻止了文件上传
  • 调试curl端请求
    修改send.php增加curl错误输出,同时模拟浏览器UA避免被免费主机的WAF拦截:
    <?PHP
      $web_page_to_send = "http://admin123.unaux.com/receive.php";
      $file_name_with_full_path = "test.jpg";
      $post_request = array
      (
        "sender" => "tmp", 
        "file" => curl_file_create($file_name_with_full_path)
      );
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $web_page_to_send);
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $post_request);
      // 模拟浏览器UA
      curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36');
      $result = curl_exec($ch);
      // 输出curl错误与HTTP状态码
      if(curl_errno($ch)){
        echo "<br>Curl请求错误:".curl_error($ch);
      }
      $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
      echo "<br>请求HTTP状态码:".$httpCode;
      curl_close($ch);
      echo "<br>Result: ".$result;
    ?>
    
    如果返回403状态码,说明免费主机的防火墙拦截了上传请求,可尝试更换请求头、或联系主机商确认是否允许自定义上传。
  • 检查免费主机的特殊限制
    部分免费主机默认禁止非页面表单的上传请求、或限制可上传的文件类型、单文件大小,可查阅对应主机的官方说明文档确认限制规则。

内容的提问来源于stack exchange,提问作者Sumant Bag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 11:39:04