【服务器配置】php move_uploaded_file文件移动失败

在学习php的过程中,很多时候在本地windows的环境下跑通的代码上传到云服务器(我使用的云主机的系统是Ubuntu)上的时候发生一些自己不敢相信的事情,相信很多小伙伴和我有过一样的经历。

最近在做上传图片这样一个实验的时候,这种情况再次发生了,很痛苦,在网上找到的答案都没能很好的解决问题,只好静下心来想一下问题可能出现在什么位置。


出现这种问题可能是因为:
1、权限不够
2、文件太大(默认只能上传2M以内的文件)
3、文件路径不对


首先可以很快的将2排除,因为在写php程序的时候我将这个问题就给过滤掉了。

然后再考虑3这种可能性。将tmp 和目标路径打印出来的时候发现,tmp文件中一直都没有文件,目标路径下更是没有任何东西。

然后我就想着去查看php.ini文件中的描述

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;


; Whether to allow HTTP file uploads.
; http://php.net/file-uploads
file_uploads = On


; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
upload_tmp_dir = "/var/www/tmp"


; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 4M


; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20

     我对描红的位置进行了修改将tmp文件夹配置到/var/www/tmp这个位置结果发现这个tmp目录下依旧不会出现我想得到的.tmp文件,然后就将3的可能性给排除了,紧接着我对/var/www/tmp的权限进行了修改,修改为所有人可读可写可操作,对目标文件夹进行了同样的操作之后重启apache服务器


sudo /etc/init.d/apache2 restart


问题得到了解决。下面贴出文件上传的代码


<?php 
function uploadFile($fileInfo,$uploadPath = 'uploads',$flag=true,$allowExt=array('jpeg','jpg','gif','png'),$maxSize = 2097152){
	// 判断错误号
	if ($fileInfo ['error'] > 0) {
		switch ($fileInfo ['error']) {
			case 1 :
				$mes = '上传文件超过了PHP配置文件中upload_max_filesize选项的值';
				break;
			case 2 :
				$mes = '超过了表单MAX_FILE_SIZE限制的大小';
				break;
			case 3 :
				$mes = '文件部分被上传';
				break;
			case 4 :
				$mes = '没有选择上传文件';
				break;
			case 6 :
				$mes = '没有找到临时目录';
				break;
			case 7 :
			case 8 :
				$mes = '系统错误';
				break;
		}
		echo ( $mes );
		return false;
	}
	$ext = pathinfo ( $fileInfo ['name'], PATHINFO_EXTENSION );

	if(!is_array($allowExt)){
		exit('系统错误');
	}
	// 检测上传文件的类型
	if (! in_array ( $ext, $allowExt )) {
		exit ( '非法文件类型' );
	}
	//$maxSize = 2097152; // 2M
	                  // 检测上传文件大小是否符合规范
	if ($fileInfo ['size'] > $maxSize) {
		exit ( '上传文件过大' );
	}
	//检测图片是否为真实的图片类型
	//$flag=true;	
	if($flag){
		if(!getimagesize($fileInfo['tmp_name'])){
			exit('不是真实图片类型');
		}
	}
	// 检测文件是否是通过HTTP POST方式上传上来
	if (! is_uploaded_file ( $fileInfo ['tmp_name'] )) {
		exit ( '文件不是通过HTTP POST方式上传上来的' );
	}
	//$uploadPath = 'uploads';
	if (! file_exists ( $uploadPath )) {
		mkdir ( $uploadPath, 0777, true );
		chmod ( $uploadPath, 0777 );
	}
	$uniName = md5 ( uniqid ( microtime ( true ), true ) ) . '.' . $ext;
	$destination = $uploadPath . '/' . $uniName;
	if (! move_uploaded_file ( $fileInfo ['tmp_name'], $destination )) {
		exit ( '文件移动失败' );
	}
	
// 	return array(
// 		'newName'=>$destination,
// 		'size'=>$fileInfo['size'],
// 		'type'=>$fileInfo['type']
// 	);
//返回文件的路径
	return $destination;
}



<?php
require_once 'upload.func.php';
header("Content-type:text/html;charset=utf8");
$fileinfo = $_FILES['filename'];
echo uploadFile($fileinfo);

<html>
    <head>
        <title>上传文件</title>
    </head>
    <body>
        <form action="uplodefile.php" method="post" enctype="multipart/form-data">
            <input type="file" name="filename"><br>
            <input type="submit" name="上传">
        </form>
    </body>
</html>




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值