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

PHP使用shell_exec后台处理Excel提示临时文件不存在的问题求助

解决PHP后台执行Excel处理时临时文件不存在的问题
  • 核心问题:PHP会在HTTP请求结束后自动删除上传的临时文件,当后台进程启动时原请求已结束,临时文件已被清理;另外你传递的tmp_name末尾带有空格,导致路径无效。

  • 具体解决步骤:

    1. 复制临时文件到永久存储目录
      在原上传处理脚本中,先把上传的临时文件复制到一个不会被自动清理的目录(比如/var/uploads/temp/):

      // 先清理tmp_name末尾的空格
      $cleanTmpName = trim($_FILES['file']['tmp_name']);
      $targetPath = '/var/uploads/temp/' . $_FILES['file']['name'];
      // 执行复制操作
      if (copy($cleanTmpName, $targetPath)) {
          // 后续打包参数时使用这个新路径
      } else {
          // 处理复制失败的异常情况
      }
      
    2. 修正参数中的路径错误
      打包base64参数时,确保使用清理后的路径(去掉末尾空格),避免传递无效的文件路径。

    3. 后台脚本处理完成后清理文件
      在inventory_excel_upload.php处理完Excel后,删除复制的临时文件,避免占用磁盘空间:

      $processedFile = '/var/uploads/temp/' . $fileName;
      if (file_exists($processedFile)) {
          unlink($processedFile);
      }
      
    4. 确保目录权限正确
      给永久存储目录设置合适的权限,让运行PHP的用户(通常是www-data)拥有读写权限:

      chown -R www-data:www-data /var/uploads/temp/
      chmod -R 755 /var/uploads/temp/
      
    5. 稳定运行后台进程
      使用nohup命令确保后台进程不会因会话结束而终止,同时重定向输出避免生成冗余日志:

      $encodedParams = base64_encode(json_encode([
          'file' => [
              'name' => $_FILES['file']['name'],
              'type' => $_FILES['file']['type'],
              'tmp_name' => $targetPath, // 使用复制后的永久路径
              'error' => $_FILES['file']['error'],
              'size' => $_FILES['file']['size']
          ]
      ]));
      // 执行后台命令
      shell_exec('nohup /www/server/php/74/bin/php -f /background_processes/inventory_excel_upload.php "' . $encodedParams . '" > /dev/null 2>&1 &');
      

内容的提问来源于stack exchange,提问作者Hasan Yüksektepe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:36:22