系统环境:ubuntu11.10/apache2/php5.3.6
在LAMP环境中,测试一个简单的php文件上传功能时,发现/var/log/apache2/error.log中出现如下php警告:
- [TueJan3109:40:272012][error][client127.0.0.1]PHPWarning:move_uploaded_file(/home/leotody/32883679.jpeg):failedtoopenstream:Permissiondeniedin/var/www/upload_file.phponline25,referer:http://localhost/info.html
- [TueJan3109:40:272012][error][client127.0.0.1]PHPWarning:move_uploaded_file():Unabletomove'/tmp/phps05ssU'to'/home/leotody/32883679.jpeg'in/var/www/upload_file.phponline25,referer:http://localhost/info.html
提示没有访问权限,文件上传的代码如下:
-
- if(file_exists("upload/".$_FILES["file"]["name"]))
- {
- echo$_FILES["file"]["name"]."alreadyexists.";
- }
- else
- {
- if(move_uploaded_file($_FILES["file"]["tmp_name"],"upload/".$_FILES["file"]["name"]))
- {
- echo"Storedin:"."upload/".$_FILES["file"]["name"];
- }
- else
- {
- echo"moveerror!";
- }
- }
通过查找资料,发现网上有说是selinux启动的原因,检查系统并未启动selinux,查看upload目录默认权限ls -ld upload,结果为755:
-
- drwxr-xr-x2rootroot40962012-01-3110:59upload
故可以改upload目录的拥有者为www-data(即apache)
- sudochown-Rwww-data:www-dataupload
-
- drwxr-xr-x2www-datawww-data40962012-01-3110:59upload