2010-07-20 62 views
2

我的PHP脚本可以上传文件,但是在高于自身的目录中不能这样做。PHP无法在高于它的目录中上传文件

例如:它会在upload/节省(相对路径在同一水平作为脚本),但不是在/usr/local/hello/即使该文件的权限是正是相同。没有最大上传大小,最大发布大小,执行时间和安全模式关闭的问题。任何人有任何想法?我什至不能得到一个错误信息 - 只有当它失败时,下面的$worked返回false。

<?php 
// Removed the rest of the error-checking code! 
$contentDir = "/usr/local/hello/"; // <-- doesn't work, chmod 0777, owner: root, group root 
//$contentDir = "upload/"; <-- works, chmod 0777 owner: root, group: root 
error_reporting(E_ALL); 
$filename = $_FILES["filey"]["name"]; 
$worked = move_uploaded_file(
       $_FILES["filey"]["tmp_name"], 
       $contentDir.$filename); 
var_dump($worked); 
?> 

编辑:我的open_basedir设置,通过phpinfo()函数给出的,分别是:

Directive  Local Value Master Value 
open_basedir no value no value 

谢谢!

+0

可能不是这种情况(我会去open_basedir),但是你没有运行chroot这个东西?即你认为它是/ usr/local/hello,但php认为不然? (因为其他差异是绝对vs相对路径) – mvds 2010-07-20 23:03:57

回答

4

open_basedir配置变量可能会限制目录。

请参阅PHP手册中的open_basedir

+0

如果它没有值,它不应该限制任何东西。 – Mewp 2010-07-21 08:28:59

1

请向我们展示$_FILES['filey']['error']的内容,错误上传文件不像往常一样报告,但在该结构中。

http://php.net/manual/en/features.file-upload.errors.php

虽然它很可能是什么Mewp

+0

尽管我没有在问题中添加它,但是该变量的转储始终为: '[“error”] => int(0)':'Value:0;没有错误,文件上传成功.' – ash 2010-07-20 23:33:04

0

您使用的是原始的客户端文件名作为服务器端的文件名。该文件名是否已经存在于服务器上?该目录可能为0777,但如果该文件名已存在,则该文件也必须可由Web服务器的UID写入。

例如如果您正在上传“resume.doc”,那么/usr/local/hello/resume.doc是否已经存在?如果它不是模式0777,则move_uploaded_file()将失败。

docs状态,如果源文件IS有效的上传文件,但出于某种原因,此举失败,将发出警告,所以请检查您的PHP错误日志中。