php移动\上传\文件()错误?

czfnxgou  于 2021-10-10  发布在  Java
关注(0)|答案(13)|浏览(308)

我正在使用以下代码,它正在本地计算机上成功上载文件。在我的本地机器上显示“已成功上载”。

// Upload file
$moved = move_uploaded_file($_FILES["file"]["tmp_name"], "images/" . "myFile.txt" );

if( $moved ) {
  echo "Successfully uploaded";         
} else {
  echo "Not uploaded";
}

但当我在我的在线服务器上使用此代码时,它并没有上传文件,只是显示消息“NotUpload”。
我怎样才能知道问题是什么,怎样才能让实际问题显示给用户?

hc8w905p

hc8w905p1#

检查web服务器是否具有写入“images/”目录的权限

9lowa7mx

9lowa7mx2#

按如下方式编辑代码:

// Upload file
$moved = move_uploaded_file($_FILES["file"]["tmp_name"], "images/" . "myFile.txt" );

if( $moved ) {
  echo "Successfully uploaded";         
} else {
  echo "Not uploaded because of error #".$_FILES["file"]["error"];
}

它将为您提供以下错误代码值1到8之一:
upload_err_ini_size=值:1;上载的文件超出了php.ini中的upload\u max\u filesize指令。
上传错误表单大小=值:2;上载的文件超过了html表单中指定的max_file_size指令。
上传错误部分=值:3;上载的文件仅部分上载。
upload_err_no_file=值:4;没有上载任何文件。
upload_err_no_tmp_dir=值:6;缺少一个临时文件夹。在PHP5.0.3中引入。
upload\u err\u cant\u write=值:7;无法将文件写入磁盘。在PHP5.1.0中引入。
上传错误扩展=值:8;php扩展停止了文件上载。php没有提供一种方法来确定导致文件上传停止的扩展名;使用phpinfo()检查已加载扩展的列表可能会有所帮助。

hgb9j2n6

hgb9j2n63#

试试这个:

$upload_dir = $_SERVER['DOCUMENT_ROOT'] . "/images/";

if (is_dir($upload_dir) && is_writable($upload_dir)) {
    // do upload logic here
} else {
    echo 'Upload directory is not writable, or does not exist.';
}

这将立即标记任何文件权限错误。

eufgjt7s

eufgjt7s4#

我怎么知道是什么问题
容易的。请参阅Web服务器的错误日志。
如何让实际问题显示给用户?
永远不要这样做。
一个普通的用户不会理解这个错误。
恶意用户不应得到任何反馈,尤其是以信息量很大的错误消息的形式。
只需显示一页的借口。
如果无法访问服务器的错误日志,则任务会变得更加复杂。
有几种方法可以联系错误消息。
要在屏幕上显示错误消息,可以将这些行添加到代码中

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

或创建自定义错误日志文件

ini_set('log_errors',1);
ini_set('error_log','/absolute/path/tp/log_file');

还有其他一些方法。
但您必须了解,如果没有实际的错误消息,您将无法移动。在黑暗中很难失明

iovurdzv

iovurdzv5#

move_uploaded_file() 将返回: FALSE 如果文件名无效 FALSEissue a warning 如果apache进程没有对源目录或目标目录的读/写权限,则在错误日志中
php错误日志
我的php错误日志位于: /var/log/httpd/error_log 有这些错误:
警告:移动上传的文件(images/robot.jpg):无法打开流:第78行/var/www/html/mysite/mohealth.php中的权限被拒绝
警告:move_upload_file():无法将第78行的“/tmp/phpskd2qm”移动到/var/www/html/mysite/mohealth.php中的“images/robot.jpg” move_uploaded_file() 尝试将文件从临时目录移动到目标目录。当apache进程尝试移动文件时,它无法读取临时目录或写入目标目录。
查找运行apache(web服务器)的用户通过以下命令检查运行apache服务的用户: ps aux | grep httpd . 第一列是用户名。
检查临时目录的读取权限:您可以通过调用 echo sys_get_tmp_dir(); 在php页面中。然后在命令行上,发出 ls -ld /tmp/temporary-dir 查看apache用户是否有权在此处读取
检查目标目录的写入权限:问题 ls -ld /var/www/html/destination-directory 查看apache用户是否有权在此处写入
根据需要使用添加权限 chownchgrp 使用以下命令重新启动apache sudo service httpd restart

sqserrrh

sqserrrh6#

您是否检查文件是否已上载?可能您超过了最大发布大小或最大上传文件大小。当使用filezilla登录时,您正在复制文件,当通过php wiritng上传文件时,该文件来自运行apache的用户(例如www-data),请尝试将chmod 755用于图像。

gcxthw6b

gcxthw6b7#

或者运行suexec,不再需要更改权限。

gr8qqesn

gr8qqesn8#

请检查您的 form 标记具有以下属性: enctype="multipart/form-data"

r1zhe5dt

r1zhe5dt9#

$uploadfile = $_SERVER['DOCUMENT_ROOT'].'/Thesis/images/';
$profic = uniqid(rand()).$_FILES["pic"]["name"]; 

if(is_uploaded_file($_FILES["pic"]["tmp_name"]))
{
    $moved = move_uploaded_file($_FILES["pic"]["tmp_name"], $uploadfile.$profic);
    if($moved)
    {
        echo "sucess";
    }
    else
    {
        echo 'failed';
    }
}
wtlkbnrh

wtlkbnrh10#

在虚拟主机上检查您的 disk quota .
如果超过配额, move_uploaded_file 返回错误。
ps:我已经找了很久了:)

r7knjye2

r7knjye211#

请检查权限“images/”目录

az31mfrm

az31mfrm12#

我遇到了一个非常模糊和恼人的错误原因6。在摆弄了一些安装了nfs的卷之后,上传开始失败。通过重新启动服务解决了问题

systemctl restart php-fpm.service
systemctl restart httpd.service
x0fgdtte

x0fgdtte13#

在里面 php.ini 搜索上载最大文件大小和发布最大文件大小。我也遇到了同样的问题,解决方法是将这些值更改为大于文件大小的值。

相关问题