gpt4 book ai didi

PHP move_uploaded_file 失败且没有错误

转载 作者:太空宇宙 更新时间:2023-11-04 09:18:47 26 4
gpt4 key购买 nike

在 LEMP(Linux CentOS、Nginx、MariaDB、PHP)服务器上,/etc/php.ini 文件具有以下内容。

file_uploads = on
upload_tmp_dir = /tmp

Stage1.html 有以下标记,用于选择图像文件,并将图像发布到 Stage2.php。

<form action="Stage2.php" method="post" enctype="multipart/form-data">
<input type="file" name="upload">
<input type="submit">
</form>

Stage2.php 具有以下内容。

<?php
$original_name = $_FILES["upload"]["name"];
$temporary_name = $_FILES["upload"]["tmp_name"];
$target = "/var/www/html/images/" . $original_name;

if(move_uploaded_file($temporary_name, $target)) {echo "Success";}
else{echo "Failed";}
?>

原始文件、临时文件和目标已正确设置。但是,返回 Failed

enter image description here

将以下内容添加到 Stage2.php 返回 0。引用 PHP Manual , 0表示“没有错误,文件上传成功。”

$_FILES["upload"]["error"];

将以下内容添加到 Stage2.php 不会显示任何错误。这让我怀疑 PHP 认为一切正常,也许问题出在 CentOS 或 Nginx 上。这是逻辑假设吗?

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

为了调试,在 CentOS 中,我将/tmp 和/var/www/html/images 的权限设置为 777(所有人都可以读、写、执行)。仍然没有返回错误。

enter image description here

最佳答案

为了防止其他人遇到这个问题,我想分享我的发现。我能够断定这是 Linux CentOS 的问题,而不是 PHP 的问题。

通常,open_basedir 将在 /etc/php.ini 中设置为 /var/www。在这种情况下,upload_tmp_dir 必须位于 /var/www 下方。我将 upload_tmp_dir 设置为 /var/www/html/images/tmp

upload_tmp_dir = /var/www/html/images/tmp

然后我设置临时上传目录权限为755。

[john.doe@server1 ~]# chmod 755 /var/www/html/uploads/tmp

然后我使用以下 PHP 来确定 PHP 使用哪个用户上传文件。在我的场景中,用户是 apache

<?php
echo exec('whoami');
?>

确定用户是 apache 后,我将临时上传目录的所有者设置为 apache。

[john.doe@server1 ~]# chown apache:root /var/www/html/uploads/tmp

最后,我必须将临时和永久上传目录的 SELinux 上下文设置为 httpd_sys_rw_content_t

[john.doe@server1 ~]# chcon --type httpd_sys_rw_content_t /var/www/html/uploads
[john.doe@server1 ~]# chcon --type httpd_sys_rw_content_t /var/www/html/uploads/tmp

完成这些操作后,我就可以使用 PHP 上传文件了。

关于PHP move_uploaded_file 失败且没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44228656/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com