PHP上传文件 - 正确的代码但无法找到文件/路径

时间:2013-04-09 09:58:03

标签: php file upload

第一个问题已经有一段时间了。基本上,我有一些代码(1)在现场环境中完美运行,(2)用于在我的家庭OSX环境中工作,但(3)现在不起作用。

HTML:

<form id="upload_form" action="php/upload_class_list.php" method="post" accept-charset="UTF-8" enctype="multipart/form-data" target="upload_target" >
    <label>File:</label>
    <input name="myfile" type="file" size="35" />
    <input id="upload_submit" type="submit" value="Upload" />
    <iframe id="upload_target" name="upload_target" style="width:0;height:0;border:0px solid #fff;"></iframe>
</form>

PHP文件:

$destination_path = getcwd().DIRECTORY_SEPARATOR;

$result = 0;

$target_path = $destination_path . basename( $_FILES['myfile']['name']);

if(@move_uploaded_file($_FILES['myfile']['tmp_name'], $target_path)) {   
   ...
}

sleep(1);
?>

<script language="javascript" type="text/javascript">top.upload_class_list(<?php echo $result; ?>);</script>

脚本最后会触发,但PHP代码不会进入if(在本地开发环境中),因此$result保持为0。

似乎没有拿起要上传的文件的path; $destination_path指向PHP文件所在的文件夹,而不是指向找到该文件的位置。

我认为当我更改为Mountain Lion并重建PHP设置时,我的本地环境可能已停止工作。

停止找到文件缺少什么?

让我强调一下:完全相同的代码在我的实时Hostmonster设置中运行良好,所以这是一个环境问题,我想:)

感谢。

2 个答案:

答案 0 :(得分:5)

  

if(@move_uploaded_file($ _ FILES ['myfile'] ['tmp_name'],$ target_path)){
    ...   }

     

停止找到文件缺少什么?

是什么让您认为问题是找到的文件?可能找到 文件,但失败的是move ...例如因为Web服务器没有权限写入target_path

您可以查看:

$src = $_FILES['myfile']['tmp_name'];
$dst = $target_path;

if (!file_exists($src))
   die("Okay, the file is actually not found");

if (!is_readable($src))
   die("Very bad hosting juju. The file was uploaded but I can't read it?!?");

if (!is_writeable($destination_path))
   die("As expected, you can't upload a file here. This is a good thing.");

@touch($dst);
if (!file_exists($dst))
   die("So call me a Marine, the file SHOULD be writeable (which is not so good), and yet I could not write it! Perhaps disk full? User overquota? Some weird security setup?");

这是一件好事的原因是因为该目录包含可执行的PHP文件,如果有人可以在那里上传PHP文件,那么这将是一个主要的安全漏洞。

你可以留出另一个目录并使其可写(记得放入.htaccess或其他系统禁止从外部读取/执行访问)。

答案 1 :(得分:-1)

可能是这个

<?php 
 $target = "upload/"; 
 $target = $target . basename( $_FILES['uploaded']['name']) ; 
 $ok=1; 
 if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)) 
 {
    echo "The file ". basename( $_FILES['uploaded']['name']). " has been uploaded";
 } 
 else {
    echo "Sorry, there was a problem uploading your file.";
}
?>