2013-04-30 55 views
0

我有一个通过php的move_uploaded_file()上传一些文件的脚本。PHP move_uploaded_file()在主机上失败

在我的本地主机上测试它工作正常。尝试在主机上执行相同的操作时会出现问题。我已经在这方面讨论了这方面的所有主题 - 但他们都没有解决我的问题。

CODE:

<?php 
$folder = 'img'; 
if (isset($_FILES['test'])) { 
    if (is_writable($folder)) 
     echo 'Writable'; 
    else 
     echo 'IMG is not writable'; 

    $tmp_name = $_FILES['test']['tmp_name']; 
    $name = $_FILES['test']['name']; 
    if (move_uploaded_file($tmp_name, $folder . '/' . $name)) { 
     echo 'File was uploaded'; 
    } 
    else { 
     echo 'File was not uploaded'; 
    } 
} 
else { 
    echo 'No file - no operation'; 
} 
?> 

<html> 
<body> 
    <form action="" enctype="multipart/form-data" method="POST"> 
     <input type="file" name="test" /> 
     <input type="submit" value="Test" /> 
    </form> 
</body> 
</html> 

消息如下所示:

可写 警告:move_uploaded_file()以[function.move上传文件]:无法移动“C:\ Windows \ TEMP \ php9E75.tmp”到 'F中IMG/20130113_114901.jpg':\ hshome \ CTC-Ultralife公司\ ultralife.com \新\ ADMIN \为index_files \上线11 文件功能\ test2.php没有上传

文件夹似乎是可写的。即使该文件没有上传,它也是使用文件夹中指定的名称创建的(即使它是空文件)。

我不知道服务器的绝对路径 - 它不是我的。

您的帮助将不胜感激。 在此先感谢。

+1

可能是一个文件权限问题,因为临时目录位于C:\ – user1909426 2013-04-30 19:43:46

回答

1

我认为你必须给move_uploaded_file函数一个绝对路径。

编辑:

如果你不知道绝对路径,你可以使用__DIR__不断弥补的绝对路径。

假设您在function文件夹中的文件夹img,你可以写这样的事情:

$fullPath = __DIR__ . '/img/' . $name; 
if (move_uploaded_file($tmp_name, $fullPath)) { 
    echo 'File was uploaded'; 
} else { // ... } 

为了了解真正的问题,你已经寻找到错误日志。

+0

现在也试过了(即使我被迫使用dirname(\ _ \ _ FILE \ _ \ _))。还是行不通。谢谢。 – 2013-04-30 20:16:39

1

警告:在黑暗中完全刺伤。我不知道是否属于这种情况,因为我不在Windows服务器上工作。

这可能是/需要是\。我认为Windows不会以另一种方式处理斜线。这将解释为什么它可以找到你的目录,但不能解释它里面的文件。

+0

我试过(逃避\\)。那也行不通。谢谢。 – 2013-04-30 20:17:20

+0

它看起来并不像你使用的\,它看起来像你使用/(相反的方向)。 – mbarlocker 2013-05-01 03:03:50

+0

是的,我做过了。然后,根据您的建议,我将它切换到“\\” - 以便转义它并使用\。这个方法仍然像/一样。具有指定名称的文件是在所需的文件夹中创建的,但它仍然没有内容。我也尝试上传与脚本相同的目录中的文件。同样的结果。谢谢 – 2013-05-01 15:11:31