PHP上传的文件不存在。

4
我已经确保了 /tmp 文件夹是可写的,并且在 php.ini 中进行了设置。
upload_max_filesize = 5M
post_max_size = 8M

在我的upload.html文件中。
<html>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>

</body>
</html>

在我的 upload_file.php 文件中

<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo "Error: " . $_FILES["file"]["error"] . "<br>";
  }
else
  {
  echo "Upload: " . $_FILES["file"]["name"] . "<br>";
  echo "Type: " . $_FILES["file"]["type"] . "<br>";
  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
  echo "Stored in: " . $_FILES["file"]["tmp_name"];
  move_uploaded_file ($_FILES["file"]["tmp_name"] , '/var/www/html/web' );
  }
?> 

这是输出结果

Upload: screenshot 2013-12-30 15:00:54.png
Type: image/png
Size: 201.8154296875 kB
Stored in: /tmp/phpEdIgXr 

但是 /tmp/phpEdIgXr 文件不存在!


你怎么知道?file_exists($_FILES["file"]["tmp_name"]) 真的会返回 false 吗? - Pekka
不存在是什么意思? - om_deshpande
1
这是一个临时文件。当PHP进程停止时,它会被删除。您需要将文件内容复制到永久位置。 - om_deshpande
1
请记住,一旦脚本完全执行,临时文件将立即被删除。为了保留它,请将其移动到其他地方。 - Mohammad Tomaraei
如果您将文件存储在名为web的文件夹中,并且在根目录下运行脚本(这通常是问题所在),请使用“'web'”代替“'/var/www/html/web'”,并设置绝对路径而不是相对路径。 - Funk Forty Niner
显示剩余3条评论
2个回答

2

只需将以下代码放置并尝试。对你可能有帮助。

if ($_FILES["file"]["error"] > 0)
    {
        echo "Apologies, an error has occurred.";
        echo "Error Code: " . $_FILES["file"]["error"];
    }
    else
    {
        move_uploaded_file($_FILES["file"]["tmp_name"],"[YOUR FOLDER PATH]".$_FILES["file"]["name"]); 
    }

谢谢,我忘记在目标路径后指定文件名了。 - No_name

0

如果要在目录中上传文件,您需要对该文件夹进行chmod 777操作。


朋友们不要让其他朋友因为安全原因将他们的上传文件夹设置为777;给PHP写入文件夹的权限需要使用chmod和chown的组合。因此,该文件夹的所有者应该是Web服务器(通常是Apache的www-data)或cgi,所以chmod 755就足够了。 - bpile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接