Awa*_*wan 32 php file-upload file
我使用以下代码,它成功上传本地计算机上的文件.它在我的本地计算机上显示"已成功上传".
// Upload file
$moved = move_uploaded_file($_FILES["file"]["tmp_name"], "images/" . "myFile.txt" );
if( $moved ) {
echo "Successfully uploaded";
} else {
echo "Not uploaded";
}
Run Code Online (Sandbox Code Playgroud)
但是,当我在我的在线服务器上使用此代码时,它不上传文件,只显示消息"未上传".
我怎么知道问题是什么?如何才能将实际问题显示给用户?
小智 47
编辑代码如下:
// 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"];
}
Run Code Online (Sandbox Code Playgroud)
它将为您提供以下错误代码值1到8之一:
UPLOAD_ERR_INI_SIZE =值:1; 上传的文件超过了php.ini中的upload_max_filesize指令.
UPLOAD_ERR_FORM_SIZE =价值:2; 上载的文件超出了HTML表单中指定的MAX_FILE_SIZE指令.
UPLOAD_ERR_PARTIAL =值:3; 上传的文件仅部分上传.
UPLOAD_ERR_NO_FILE =值:4; 没有上传文件.
UPLOAD_ERR_NO_TMP_DIR =价值:6; 缺少临时文件夹.在PHP 5.0.3中引入.
UPLOAD_ERR_CANT_WRITE =价值:7; 无法将文件写入磁盘.在PHP 5.1.0中引入.
UPLOAD_ERR_EXTENSION =价值:8; PHP扩展程序停止了文件上载.PHP没有提供确定哪个扩展名导致文件上传停止的方法; 使用phpinfo()检查加载的扩展名列表可能会有所帮助.
And*_*c ॐ 40
检查Web服务器是否有权写入"images /"目录
Mar*_*ean 36
试试这个:
$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.';
}
Run Code Online (Sandbox Code Playgroud)
这将立即标记任何文件权限错误.
You*_*nse 16
我怎么知道这是什么问题
简单.请参阅Web服务器的错误日志.
如何才能将实际问题显示给用户?
永远不要这样做.
普通用户不会对此错误一无所知.
恶意用户不应得到任何反馈,尤其是以非常有用的错误消息形式.
只是显示一个借口的页面.
如果您无法访问服务器的错误日志,则任务变得更加复杂.
有几种方法可以与错误消息联系.
要在屏幕上显示错误消息,您可以将这些行添加到代码中
ini_set('display_errors',1);
error_reporting(E_ALL);
Run Code Online (Sandbox Code Playgroud)
或者制作自定义错误日志文件
ini_set('log_errors',1);
ini_set('error_log','/absolute/path/tp/log_file');
Run Code Online (Sandbox Code Playgroud)
还有其他一些方法.
但你必须明白,如果没有实际的错误信息,你就无法移动.在黑暗中很难盲目
move_uploaded_file()
将返回:
FALSE
如果文件名无效FALSE
并issue a warning
在错误日志如果Apache进程没有读/写权限的源或目标目录PHP错误日志
我的php错误日志是:/var/log/httpd/error_log
并且有这些错误:
警告:move_uploaded_file(images/robot.jpg):无法打开流:第78行/var/www/html/mysite/mohealth.php中的权限被拒绝
警告:move_uploaded_file():无法在第78行的/var/www/html/mysite/mohealth.php中将'/ tmp/phpsKD2Qm'移动到'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用户是否有权在此处阅读
检查Destination Dir的写入权限:问题ls -ld /var/www/html/destination-directory
是看看apache用户是否有权在此处写入
根据需要使用chown
或添加权限chgrp
使用重启Apachesudo service httpd restart
归档时间: |
|
查看次数: |
126985 次 |
最近记录: |