【问题标题】:php move_uploaded_file forcely gives new namephp move_uploaded_file 强制赋予新名称
【发布时间】:2012-09-21 05:19:31
【问题描述】:

我正在尝试使用 php 上传文件,代码片段

$upload_path = "/var/upload/" . $_FILES['mfile']['name'];
if(move_uploaded_file($_FILES['mfile']['tmp_name'], $upload_path))
    echo "file uploaded";
else
    echo "upload failed";

注意:/var/upload 目录存在且拥有 777 权限。

代码打印“上传失败”

当我检查 /var/upload 目录时,有文件 f_505bf77bd8a0f_mypdf.pdf。出了什么问题?

添加日志(根据loler的要求):

[Fri Sep 21 10:58:31 2012] [error] [client ::1] PHP Notice:  Undefined variable: showdebug in /Volumes/data/htdocs/ebeu/upload.php on line 558, referer: http://localhost/upload/test/upload.php
[Fri Sep 21 10:58:31 2012] [error] [client ::1] PHP Notice:  Undefined variable: showdebug in /Volumes/data/htdocs/ebeu/upload.php on line 559, referer: http://localhost/upload/test/upload.php
[Fri Sep 21 10:58:31 2012] [error] [client ::1] PHP Notice:  Undefined index: accessories in /var/www/my/web/folder/myupload.php on line 21, referer: http://localhost/upload/test/upload.php
[Fri Sep 21 10:58:31 2012] [error] [client ::1] PHP Notice:  Undefined index: pmaterial in /var/www/my/web/folder/myupload.php on line 27, referer: http://localhost/upload/test/upload.php
[Fri Sep 21 10:58:31 2012] [error] [client ::1] PHP Notice:  Undefined index: occupation_bwc in /var/www/my/web/folder/myupload.php on line 33, referer: http://localhost/upload/test/upload.php
[Fri Sep 21 10:58:31 2012] [error] [client ::1] PHP Notice:  Undefined index: occupation_bwc in /var/www/my/web/folder/myupload.php on line 75, referer: http://localhost/upload/test/upload.php
[Fri Sep 21 10:58:31 2012] [error] [client ::1] PHP Notice:  Undefined index: occupation_spec in /var/www/my/web/folder/myupload.php on line 75, referer: http://localhost/upload/test/upload.php
[Fri Sep 21 10:58:31 2012] [error] [client ::1] PHP Notice:  Undefined index: babycarrier in /var/www/my/web/folder/myupload.php on line 78, referer: http://localhost/upload/test/upload.php
[Fri Sep 21 10:58:31 2012] [error] [client ::1] PHP Notice:  Undefined variable: accessories_all in /var/www/my/web/folder/myupload.php on line 79, referer: http://localhost/upload/test/upload.php
[Fri Sep 21 10:58:31 2012] [error] [client ::1] PHP Notice:  Undefined variable: pmaterials_all in /var/www/my/web/folder/myupload.php on line 80, referer: http://localhost/upload/test/upload.php

添加了 var_dump($_FILES)

array(1) {
  ["mfile"]=>
  array(5) {
    ["name"]=>
    string(23) "mypdf.pdf"
    ["type"]=>
    string(15) "application/pdf"
    ["tmp_name"]=>
    string(26) "/var/tmp/phpUl6k50"
    ["error"]=>
    int(0)
    ["size"]=>
    int(478704)
  }
}

【问题讨论】:

  • 你的upload_tmp_dir 是什么?您确定您看到的这个文件与您的上传有关,而不是来自其他地方吗? (如果您非常信任用户提供的文件名,您最终会覆盖现有文件。)
  • 你能检查一下 Apache 错误日志吗?
  • DCoder,我是 110% ;-) 确定这一点。因为我从目录中删除了所有文件并尝试了脚本。我什至验证了文件打开目录。
  • 我会 var_dump $_FILES 因为我敢打赌 $_FILES['mfile'] 可能不是您发布的内容。 “mfile”可能是错误的
  • @KrishnaSunuwar,你刚才说它返回“上传失败”,但是你能去Apache错误日志看看更详细的错误信息吗?

标签: php


【解决方案1】:

试试这个代码来上传你的文件..

if (file_exists("/var/upload/" . $_FILES["file"]["name"]))
  {
  echo $_FILES["file"]["name"] . " already exists. ";
  }
else
  {
  move_uploaded_file($_FILES["file"]["tmp_name"],
  "/var/upload/" . $_FILES["file"]["name"]);
  echo "Stored in: " . "/var/upload/" . $_FILES["file"]["name"];
  }

【讨论】:

  • 当然,没有同名的文件
【解决方案2】:

在您的var_dump() 中,$_FILES["file"]["name"] 的长度是 23,但应该是 9。所以尝试使用 trim 这个字符串。而不是

$upload_path = "/var/upload/" . $_FILES['mfile']['name'];

试着写

$upload_path = "/var/upload/" . trim($_FILES['mfile']['name']);

【讨论】:

    猜你喜欢
    • 2012-02-18
    • 2015-09-24
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多