4

每次我尝试上传文件时都会收到以下错误。

“警告:文件上传错误 - 无法在第 0 行的未知中创建临时文件”

这是我的 HTML 表单,

<form action="./inventory_list.php" enctype="multipart/form-data" name="myForm" id="myForm" method="post">
<table width="625" border="1" cellpadding="5">
  <tr>
    <td width="84">Product Name</td>
    <td width="399"><input type="text" name="product_name" id="product_name"></td>
  </tr>
  <tr>
    <td>Product Price</td>
    <td><label for="textfield2">Rs:</label>
      <input type="text" name="price" id="price"></td>
  </tr>
  <tr>
    <td>Category</td>
    <td><select name="category" id="category">
        <option value="" selected="selected"></option>
        <option value="Bedroom ">Bedroom </option>
        <option value="Living">Living room</option>
        <option value="Dining">Dining</option>
      </select></td>
  </tr>
  <tr>
    <td>Sub - Category</td>
    <td><select name="subcategory" id="subcategory">
        <option value="" selected="selected"></option>
        <option value="dinet">Dining tables</option>
        <option value="shoe">shoe racks</option>
        <option value="wardrobe">wardrobes</option>
        <option value="sofa">sofa</option>
      </select></td>
  </tr>
  <tr>
    <td>Product Details</td>
    <td><textarea name="details" cols="50" rows="10" id="details"></textarea></td>
  </tr>
  <tr>
    <td>Product Image</td>
    <td><label>
        <input type="file" name="fileField" id="fileField"/>
      </label></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input type="submit" name="button" id="button" value="Add this Item now"></td>
  </tr>
</table>
</br>
</form>

这是我的PHP代码,

if(isset($_POST["product_name"]))
{
    $product_name = mysql_real_escape_string($_POST["product_name"]);
    $price= mysql_real_escape_string($_POST["price"]);
    $category= mysql_real_escape_string($_POST["category"]);
    $subcategory= mysql_real_escape_string($_POST["subcategory"]);
    $details= mysql_real_escape_string($_POST["details"]);

    //see if duplicate product exists
    $sql = mysql_query("select id from products where product_name='$product_name' limit 1");
    $product_match = mysql_num_rows($sql);   //count the output

    if($product_match>0)
    {
        echo "The product name already exists";
        exit();
    }
    $sql= mysql_query("INSERT INTO `mystore`.`products` (`product_name`, `price`, `details`, `category`, `subcategory`, `date_added`) VALUES ( '$product_name', '$price', '$details', '$category', '$subcategory', now());")or die(mysql_error());
    $pid = mysql_insert_id();
    $newname = "$pid.jpg";

    move_uploaded_file($_FILES['fileField']['tmp_name'],'../inventory_images/$newname');
}

我正在尝试在 localhost ,测试服务器:XAMPP ,操作系统上上传:MAC 10.8

很长时间以来一直坚持这一点,我尝试了很多东西,但没有任何效果。

4

15 回答 15

13

在终端类型中:

chmod -R 777 /your/upload/folder

您可以通过执行以下代码来知道您的 php 上传文件的文件夹:

$tmp_dir = ini_get('upload_tmp_dir') ? ini_get('upload_tmp_dir') : sys_get_temp_dir();
die($tmp_dir);

在我的情况下/var/...,当我设置 777 权限时,我没有得到任何错误。

编辑

将 777 设置为/var很危险,因此您只需将其设置为 php 上传文件的文件夹(您可以购买上面的代码)。

于 2013-10-19T14:37:27.273 回答
6

你应该检查你的 php.ini 并寻找 'upload_tmp_dir' 选项。默认为空。之后,检查您的 tmp 目录的权限。如果你想知道你的服务器正在使用什么upload_tmp_dir,你可以简单地使用这段代码

$tmp_dir = ini_get('upload_tmp_dir') ? ini_get('upload_tmp_dir') : sys_get_temp_dir();
die($tmp_dir);

最后在终端外壳中,您可以键入: chmod -R 777 'your_tmp_upload_dir'

于 2014-03-18T14:16:51.460 回答
3

从 WordPress 上传文件时,我遇到了同样的错误。我在 apache 中遇到了这个错误error log file

“PHP 警告:文件上传错误 - 无法在未知中创建临时文件”。

我通过upload_tmp_dir/etc/php.ini. 被upload_tmp_dir设置为/tmp。我也设置了date.timezone. 重新启动服务器后,我能够从 WordPress 上传媒体文件。

似乎 php 没有写入该/tmp文件夹的权限。

于 2015-10-16T13:57:07.170 回答
2

如果你不知道它是什么,那就是 SeLinux。它在某些发行版(如 CentOS)中默认启用。

检查您是否正在运行 SELinux:

sestatus

如果您启用了 SELinux,请使用该chcon命令修复您的权限。

这只是一个例子nginx

chcon -R -h -t httpd_sys_script_rw_t /usr/share/nginx/tmp
chown -R nginx:nginx /usr/share/nginx/tmp
chmod -R ug+rw /usr/share/nginx/tmp

tmp 目录,chroot 中的上传目录需要设置为 /tmp 而不是完整路径。

于 2016-08-05T18:14:22.640 回答
1

可能是/tmp 目录问题。检查 /tmp 是否具有正确的访问权限和足够的空间大小。

于 2013-08-23T05:23:47.507 回答
1

最近在 Laravel 和 Wordpress(php 版本 7.3)中工作时,我收到此错误“文件上传错误 - 无法在第 0 行的未知中创建临时文件”

对我有用的解决方案是。希望这可以帮助任何面临此类问题的人。

拉拉维尔

  1. 在项目根文件夹中创建一个 tmp 文件夹。确保它具有正确设置的写入权限。
  2. 在公共文件夹中创建 php.ini 文件。

WordPress

  1. 在项目根文件夹中创建一个 tmp 文件夹。确保它具有正确设置的写入权限。
  2. 在 wp_admin 文件夹中创建 php.ini 文件。

除了您的其他 ini 设置之外,还专门在 php.ini 中添加以下行。

upload_tmp_dir = on

upload_tmp_dir = "/path/to/tmp/文件夹"

这里的路径就像 /home/cpanel username/public_html/folder/project/tmp

注意:如果您在 Laravel 中工作。如果您将文件存储在存储文件夹中,请不要忘记链接存储文件夹。为此,在终端运行以下命令。

php工匠存储:链接

于 2021-03-18T12:13:15.537 回答
0

更改“上传”目录的权限。您需要先授予 Web 服务器对其的访问权限,然后它才能将文件移动到其中。

将您的上传文件夹权限“ Read only”更改为“ Read & Write

**Edited**

阅读此链接并阅读此链接。它指导您如何更改文件权限。

于 2013-08-23T05:31:22.333 回答
0

你没有说你的平台是什么,但是如果是更高版本的 Fedora(17+),服务文件中 PrivateTmp=true 的设置可能会导致这个问题。在 /etc 中使用 PrivateTmp=false 创建服务文件至少是解决此问题的一种方法,尽管它涉及回滚安全功能。

于 2013-10-28T18:39:53.490 回答
0

在 ../inventory_images/$newname 中使用双引号。

更改此行

move_uploaded_file($_FILES['fileField']['tmp_name'],'../inventory_images/$newname');

作为

move_uploaded_file($_FILES['fileField']['tmp_name'],'../inventory_images/'.$newname);

笔记:

在带有单引号的 php 中 $newname 将显示为字符串。

用于显示变量的值使用双引号

于 2013-08-23T05:21:08.357 回答
0

对我来说,这个问题是由于服务器上缺少 Inode 而表现出来的:

df -ih
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/xvda1       512K  512K     0  100% /  

使用https://stackoverflow.com/a/9387415/7637065确定罪魁祸首目录 并删除不需要的文件。

于 2020-04-16T11:15:42.220 回答
0

/tmp当我在 WP 服务器上安装外部磁盘时,我遇到了同样的问题。我还看到一些文章建议完全/tmp清理(通过rm -rf /tmp/*)可能会导致类似的事情。我花了一段时间才弄清楚如何解决它,因为主要嫌疑人是wp-config.phpand php.ini。但事实证明,这些都是红鲱鱼,而不是设置WP_TEMP_DIR或创建您的自定义php.ini(我的图像只有php.ini-developmentand php.ini-production)是完全可以的。Wordpress 具有合理的默认行为来识别临时目录。

在操作任何配置之前,请确保您的/tmp目录是完整的并且没有任何异常(如不同的文件系统、符号链接等)

于 2021-02-26T10:26:16.843 回答
0

在我的情况下,这是由于从控制台而不是服务运行 httpd.exe Apache 服务器引起的。

于 2016-02-15T23:20:13.587 回答
0

如果现有答案都不起作用,那么我遇到的问题是 Windows 文件夹限制为 65,560 个项目。一旦我清除了文件夹,它就开始重新工作。

于 2020-04-19T18:02:16.333 回答
0
  1. 在 php.ini 中 open_basedir=/tmp:/rootdir 重启 apache:systemctl restart apache2
  2. tmp 具有完全访问权限:chmod 777 /tmp
  3. Files 文件夹应具有完全权限:chmod -Rf a+x sites/default/files
于 2020-07-23T14:29:25.670 回答
0

我在 Windows 服务器上使用 PHP,我的解决方案是:

打开“ elFinderVolumeDriver.class.php ”并找到以下行:

// maximum number of chunked upload connection. `-1` to disable chunked upload
    'uploadMaxConn' => 3,

并将值 3 更改为 -1 :

// maximum number of chunked upload connection. `-1` to disable chunked upload
    'uploadMaxConn' => -1,

在我的情况下,分块上传会导致问题。

于 2022-02-17T09:10:13.437 回答