0

我有一个通过 php 的 move_uploaded_file() 上传一些文件的脚本。

在我的本地主机上测试它工作正常。尝试在主机上执行相同操作时会出现问题。我已经在这里把所有关于这件事的话题都涂红了——但没有一个能解决我的问题。

代码:

<?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-uploaded-file]: Unable to move 'C:\WINDOWS\Temp\php9E75.tmp' to 'img/20130113_114901.jpg' in F:\hshome\ctc-ultralife\ultralife第 11 行的 .com\new\admin\index_files\function\test2.php 文件未上传

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

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

您的帮助将不胜感激。提前致谢。

4

2 回答 2

1

Warning: complete stab in the dark. I don't know if this is the case, as I don't work on Windows servers.

It may be that the / needs to be a \. I don't think Windows handles the slash being the other way. That would explain why it can find your directory, but not the file within it.

于 2013-04-30T19:48:16.870 回答
1

我认为您必须提供 move_uploaded_file 函数的绝对路径。

编辑:

如果不知道绝对路径,可以使用__DIR__常量来组成绝对路径。

假设您在img文件夹中有function文件夹,您可以编写如下内容:

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

为了了解真正的问题,您必须查看错误日志。

于 2013-04-30T19:43:26.210 回答