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

PHP文件上传在Windows正常,部署到RHEL Linux后无法运行

音频上传网站迁移RHEL后上传失败问题解决

我开发的音频上传混音网站,从Windows服务器迁移到RHEL Linux后,文件上传功能失效。用极简测试脚本验证时,Windows下正常运行,RHEL上仅返回Error moving the uploaded file!。已确认$_FILES['file']['error']为0(无上传错误),/tmp目录为空,且尝试过修改/tmp的chown和chmod权限。目标是让文件成功上传至/var/www/html/,用于后续混音操作。

测试用上传代码

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($_FILES['file']) && $_FILES['file']['error'] === UPLOAD_ERR_OK) {
        $tempFile = $_FILES['file']['tmp_name'];
        $targetDir = '/var/www/html/';
        $targetFile = $targetDir . basename($_FILES['file']['name']);
    
        if (move_uploaded_file($tempFile, $targetFile)) {
            echo 'File uploaded and moved successfully.';
        } else {
            echo 'Error moving the uploaded file.';
        }
    } else {
        echo 'Error uploading file. Error code: ' . $_FILES['file']['error'];
    }
}
?>

<form method="POST" enctype="multipart/form-data">
    <input type="file" name="file">
    <button type="submit">Upload</button>
</form>

排查与解决步骤

  • 检查目标目录权限
    确保/var/www/html/的所有者是Web服务器运行用户(RHEL通常为apache),并赋予写入权限:

    chown -R apache:apache /var/www/html/
    chmod -R 755 /var/www/html/
    

    若需更严格权限,可设置750,确保所有者组具备写入权限。

  • 验证PHP临时上传目录配置
    查看php.ini中upload_tmp_dir的配置,确认路径有效且Web服务器有读写权限:

    php -i | grep upload_tmp_dir
    

    若配置为空或路径无效,修改php.ini(路径通常为/etc/php.ini或/etc/php/[版本]/apache2/php.ini):

    upload_tmp_dir = /tmp
    

    修改后重启Web服务器和PHP-FPM(若使用):

    systemctl restart httpd
    systemctl restart php-fpm
    
  • 处理SELinux限制(RHEL核心问题)
    RHEL默认启用SELinux,可能拦截Web服务器的写入操作。查看目录SELinux上下文:

    ls -Z /var/www/html/
    

    设置允许Web服务器写入的上下文:

    chcon -R -t httpd_sys_rw_content_t /var/www/html/
    

    若需永久生效,添加SELinux规则:

    semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html(/.*)?"
    restorecon -R /var/www/html/
    
  • 临时文件存在性验证
    在move_uploaded_file前添加调试代码,确认临时文件是否存在:

    if (!file_exists($tempFile)) {
        echo 'Temporary file missing: ' . $tempFile;
        exit;
    }
    

    若临时文件不存在,需检查php.ini中的post_max_size、upload_max_filesize参数是否足够大,确保能容纳上传的音频文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:53:14