【问题标题】:PHP move_uploaded_file won't work - is_writable and is_dir = truePHP move_uploaded_file 不起作用 - is_writable 和 is_dir = true
【发布时间】:2018-07-07 10:44:26
【问题描述】:

我在服务器上上传文件时遇到问题。

我的代码:

$path = "produkty/$kategorie/$last_id/";
if(!is_dir($path)){
  mkdir($path, 0777, true);
}
if (is_dir($path) && is_writable($path)) { echo "ok"; }

它返回了。

上传代码如下:

move_uploaded_file($_FILES["uvodniobr"]["tmp_name"], $path."uvodniobr.".$ext)

如果我回显:

echo $path."uvodniobr.".$ext;

它将返回:produkty/kategorie/35/uvodniobr.png

检查文件大小、扩展名等操作正常,只是无法上传。 你知道我的代码有什么问题吗?谢谢

已解决 编辑:我试图在不更改 xampp/php/php.ini upload_max_filesize=2M 中的 php.ini 的情况下上传超过 2MB 的文件。 谢谢你的回答。

【问题讨论】:

  • 我希望is_writable返回true时,我的xampp设置没有问题了?
  • 您的 PHP 错误日志是怎么说的?您看起来好像没有为您的函数提供绝对目录。

标签: php file uploading


【解决方案1】:

我猜问题是因为你在 move_uploaded_file 中使用相对路径,而它需要绝对路径所以 您应该使用 document_root 来获取绝对路径,如下所示:

  $target_path = $_SERVER['DOCUMENT_ROOT'] . '/' .$path; // if not work try    $target_path = $_SERVER['DOCUMENT_ROOT'] . $path;
  move_uploaded_file($_FILES["uvodniobr"]["tmp_name"], 
  $target_path."uvodniobr.".$ext);

另外最好用 if 包围来检查结果

$target_path = $_SERVER['DOCUMENT_ROOT'] . '/' .$path; // if not work try    $target_path = $_SERVER['DOCUMENT_ROOT'] . $path;
if (move_uploaded_file($_FILES["uvodniobr"]["tmp_name"], 
  $target_path."uvodniobr.".$ext)) {
     echo "File is valid, and was successfully uploaded.\n";
} else {
     echo "Upload failed";
}

帮助链接move_uploaded_file & relative path

【讨论】:

  • 链接到错误报告可能不是最清晰的参考
  • 谢谢,我改变了它,所以当我回显时:echo $target_path."uvodniobr.".$ext 它返回 C:/xampp/htdocs/eshop/admin/produkty/kategorie/48/uvodniobr.png 这个目录在我的电脑上存在,但是仍然没有图片,它返回上传失败
  • 即使我使用move_uploaded_file($_FILES["uvodniobr"]["tmp_name"], "C:/xampp/htdocs/eshop/admin/produkty/asd.png"); 它仍然无法正常工作,并且我的计算机上存在文件夹 C:/xampp/htdocs/eshop/admin/produkty/。
  • @ochj1ch 你的问题还存在吗?
  • @zhilevan 不,非常感谢。这是我的错 - 我忘了在 php.ini 中编辑 upload_max_size,抱歉浪费了你的时间 - 但你很有帮助。
【解决方案2】:

这是我的错,我忘记在 xampp/php/php.ini 中将 upload_max_filesize=2M 更改为 upload_max_filesize=16M

对不起,谢谢你的努力,我真的很感激。

【讨论】:

  • 如果问题是 PHP.ini 设置,为什么还要将其他内容标记为答案 - 这可能会导致未来阅读这篇文章的人在遇到类似问题时感到困惑或错误信息问题。
  • 我需要再等 22 个小时才能将此标记为答案。别担心,我保证我会改变它。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-09
  • 1970-01-01
  • 2016-12-14
  • 2016-10-01
  • 2018-07-06
  • 2020-11-04
  • 1970-01-01
相关资源
最近更新 更多