【问题标题】:Php Upload in Linux not workingLinux中的PHP上传不起作用
【发布时间】:2015-07-28 13:09:51
【问题描述】:

我有这个 PHP 上传脚本。我可以找到JPG,但它不会上传图片。我正在尝试在 Linux mint 机器上的 localhost 上执行此操作,因此我的代码位于 /var/www/html/uploads。这是我的upload.php代码。

<?php
 $target_dir = "uploads/";
 $target_file = $target_dir . basename($_FILES["fileToUpload"]   ["name"]);
 $uploadOk = 1;
 $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
 // Check if image file is a actual image or fake image
 if(isset($_POST["submit"])) {
 $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
 if($check !== false) {
    echo "File is an image - " . $check["mime"] . ".";
    $uploadOk = 1;
 } else {
    echo "File is not an image.";
     $uploadOk = 0;
  }
 }
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
 }
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" &&          $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
  echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
  $uploadOk = 0;
  }
 // Check if $uploadOk is set to 0 by an error
 if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
 // if everything is ok, try to upload file
 } else {
 if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"],      $target_file)) {
    echo "The file ". basename( $_FILES["fileToUpload"]["name"]). "    has been uploaded.";
  } else {
    echo "Sorry, there was an error uploading your file.";
  }
}
?> 

这是我的 media_upload.php 代码

<!DOCTYPE html>
 <html>
  <body>

  <form action="upload.php" method="post" enctype="multipart/form-data">
   Select image to upload:
   <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
 </form>

 </body>
 </html> 

这是我的 apache2 错误日志中的错误消息。我认为我的问题可能是权限或路径问题。非常感谢所有帮助。

PHP 警告:move_uploaded_file(uploads/bedshaper_1021-36.jpg):无法打开流:第 38 行的 /var/www/html/uploads/upload.php 中没有此类文件或目录,引用者:http://localhost/uploads/media_upload.php

PHP 警告:move_uploaded_file(): Unable to move '/tmp/phpXeCU8c' to 'uploads/bedshaper_1021-36.jpg' in /var/www/html/uploads/upload.php on line 38, referer: @987654322 @

【问题讨论】:

  • 尝试在$target_dir中放一个绝对路径
  • 奇怪的是,您对可能出现的问题有一些具体的想法。你关注过他们吗?
  • 是的,我做到了,但它们都不起作用,我尝试了权限并重做了路径。

标签: php apache-commons-fileupload


【解决方案1】:

您必须在“/var/www/html/uploads”中创建文件夹“uploads”才能正常工作。 你也可以改

$target_dir = "uploads/";

$target_dir = "";

如果你想将图片保存在“/var/www/html/uploads”中,你应该创建一个直接路径。

$target_dir = "var/www/html/uploads";

编辑 由于您的上传脚本位于您所指的上传文件夹中,因此该脚本找不到该文件夹​​。

$target_dir = "../uploads"

也可以

【讨论】:

  • 如果他的 php 文件在上传目录中,我猜它可能存在
  • 不,他将“uploads/”作为目录,然后他尝试将图像保存在 /var/www/html/uploads/uploads/。 PHP 文件位于 /var/www/html/uploads/ 中。
  • 我要将此脚本添加到购物车中,因此我在上传内容中创建了一个名为 products 的文件夹。我现在有了我的 $target_dir = var/www/html/uploads/products。它仍然对我不起作用。我想知道我尝试上传的图片所在文件夹的路径权限是否存在问题。
  • 在这种情况下,请尝试打开控制台并从uploads 文件夹中执行sudo chmod -757 products
【解决方案2】:
/var/www/html/uploads

将您的两个 .php 文件移到此文件夹之外,如果未在下面阅读,它将正常工作。

您不必更改脚本中的任何内容,只需授予“上传”文件夹的权限即可。刚刚测试它,它工作正常。

这里有很好的说明如何做到这一点: enter link description here

【讨论】:

  • 不,权限问题不会给出那些错误:无法打开流:没有这样的文件或目录
  • 他现在可能确定他拥有正确的目录链接,下一步是授予文件夹权限。
  • 问题是他指的是脚本所在的同一个文件夹。该文件夹本身不存在
  • 我要将此脚本添加到购物车中,因此我在上传内容中创建了一个名为 products 的文件夹。我现在有了我的 $target_dir = var/www/html/uploads/products。它仍然对我不起作用。我想知道我尝试上传的图片所在文件夹的路径权限是否存在问题。
  • 用' dirname(FILE) '创建你的 $target_dir 路径,var_dump 它,然后粘上其余的,它会确保你的路径是正确的。然后,只需授予您存储上传的文件夹的权限。
【解决方案3】:

我通过将我想要文件的文件夹重命名为产品并重置产品文件夹和 upload.php 的权限来解决了这个问题,我更改了 tar_direct = /var/www/html/uploads/products 并且一切正常。感谢您的建议问题已解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 2019-07-17
    • 2012-09-15
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    相关资源
    最近更新 更多