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


Warning: File upload error - unable to create a temporary file in Unknown on line 0

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

"警告:文件上载错误-无法在未知的第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');
}

我正在尝试在本地主机上上传,测试服务器:XAMPP,OS:MAC 10.8

我在这个问题上坚持了很长时间,我尝试了很多东西,但都不起作用。

在终端类型中:

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上传文件的文件夹(您可以从上面的代码中获得)。

您应该检查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'

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

"PHP警告:文件上载错误-无法创建临时文件未知"。

我通过在/etc/php.ini中注释掉upload_tmp_dir来修复错误。将upload_tmp_dir设置为/tmp。我还设置了date.timezone。重新启动服务器后,我可以从WordPress上传媒体文件。

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

如果你不知道它是什么,那就是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而不是完整路径。

最近在Laravel和Wordpress(php 7.3版)中工作时,我收到了这个错误"文件上载错误-无法在第0行的"未知"中创建临时文件;

对我有效的解决方案是。希望这能帮助到任何面临这样问题的人。

Laravel

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

Wordpress

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

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

upload_tmp_dir=在上

upload_tmp_dir="/路径/到/tmp/文件夹";

此处的路径类似于/home/cpanel username/public_html/folder/project/tmp

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

php手工存储:链接

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

更改"上传"目录的权限。你需要让网络服务器访问它,然后它才能将文件移动到其中。

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

**Edited**

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

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

在我的案例中,它是由从控制台而不是服务运行httpd.exe Apache服务器引起的。

在..中使用双引号/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将显示为字符串。

为了显示变量的值,请使用双引号

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

使用以下方法识别罪魁祸首目录:https://stackoverflow.com/a/9387415/7637065并删除了不需要的文件。

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

  1. 在php.ini中open_basedir=/tmp:/rootdir重新启动apache:systemctl restart apache2
  2. tmp具有完全访问权限:chmod 777 /tmp
  3. 文件夹应具有完全权限:chmod -Rf a+x sites/default/files

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

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

我在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,

在我的案例中,分块上传导致了问题。