CleanX
CleanX

Reputation: 1176

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

Am getting the following error everytime I try to upload a file .

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

Here is my HTML form,

<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>

Here is my PHP code ,

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');
}

Am trying to upload on localhost , Test Server:XAMPP , OS : MAC 10.8

Am stuck on this from a long time , I tried a lot of things but nothing is working .

Upvotes: 4

Views: 69308

Answers (15)

EngineerCoder
EngineerCoder

Reputation: 1455

I am using PHP on windows server and my soluition is:

open "elFinderVolumeDriver.class.php" and find the line:

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

and change values 3 to -1 :

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

In my case chunked upload cause the problem.

Upvotes: 0

rakesh
rakesh

Reputation: 61

Recently while working in Laravel and Wordpress (php version 7.3) I got this error "File upload error - unable to create a temporary file in Unknown on line 0"

Solution that worked for me is. Hope this helps anyone facing such issue.

Laravel

  1. Create a tmp folder in project root folder. Make sure it has write permissions properly set.
  2. Create php.ini file in public folder.

Wordpress

  1. Create a tmp folder in project root folder. Make sure it has write permissions properly set.
  2. Create php.ini file in wp_admin folder.

Add below lines specifically in php.ini in addition to your other ini settings.

upload_tmp_dir = on

upload_tmp_dir = "/path/to/tmp/folder"

here path will be like /home/cpanel username/public_html/folder/project/tmp

NOTE: In case you are working in Laravel.. do not forget to link storage folder if you are storing files in storage folder. For this run below command at terminal.

php artisan storage:link

Upvotes: 3

yuranos
yuranos

Reputation: 9685

I had the same problem when I mounted an external disk as /tmp on WP server. I also saw some articles that suggested full /tmp cleanup (via rm -rf /tmp/*) can cause something similar. It took me a while to figure out how to fix it because the main suspects are wp-config.php and php.ini. But as it turned out those were red herrings, and not setting WP_TEMP_DIR or creating your custom php.ini(my image had only php.ini-development and php.ini-production) is totally Ok. Wordpress has sensible default behaviour to identify temporary dir.

Before manipulating any configs make sure your /tmp dir is intact and doesn't have anything unusual about it(like a different filesystem, symlinking, etc.)

Upvotes: 0

Vineet Kumar
Vineet Kumar

Reputation: 353

  1. In php.ini open_basedir=/tmp:/rootdir Restart apache: systemctl restart apache2
  2. tmp has full access : chmod 777 /tmp
  3. Files folder should have full permission: chmod -Rf a+x sites/default/files

Upvotes: 0

Cristian R.
Cristian R.

Reputation: 1

If none of the existing answers work, the issue I had was that Windows folder is limited to 65,560 items. Once I cleared the folder, it started re-working.

Upvotes: 0

MarkoPee
MarkoPee

Reputation: 141

For me this issue manifested itself due to lack of Inodes on the server:

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

Identified the culprit directory using: https://stackoverflow.com/a/9387415/7637065 and removed undesired files.

Upvotes: 0

user956584
user956584

Reputation: 5559

If you don't know what it is, it is SeLinux. It is enabled as default in certain distributions like CentOS.

Check if you have SELinux running:

sestatus

In the case you have SELinux enabled, fix your permissions with the chcon command.

This is just an example for 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 dir, upload dir in chroot need be set to /tmp not full path.

Upvotes: 2

Rejayi CS
Rejayi CS

Reputation: 1061

use double quotes in ../inventory_images/$newname.

change this line

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

AS

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

NOTE:

in php with single quotes $newname will be display as string.

for displaying value of a variable use double quotes

Upvotes: 0

lukyer
lukyer

Reputation: 7983

In my case it was caused by running httpd.exe Apache server from console instead of service.

Upvotes: 0

Nadir Latif
Nadir Latif

Reputation: 3773

I was getting the same error when uploading files from WordPress. I got this error in the apache error log file:

"PHP Warning: File upload error - unable to create a temporary file in Unknown".

I fixed the error by commenting out upload_tmp_dir in /etc/php.ini. The upload_tmp_dir was set to /tmp. I also set the date.timezone. After rebooting the server I was able to upload media files from WordPress.

It seems php did not have permissions to write to the /tmp folder.

Upvotes: 4

zizoujab
zizoujab

Reputation: 7800

In a terminal type :

chmod -R 777 /your/upload/folder

you can know the folder where your php uploads files by executing this code :

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

In my case I get /var/... so when I sett 777 permission I get no error.

Edit

Setting 777 to /var is dangerous so you have to set it only to the folder where php uploads the file (which you can get buy the code above).

Upvotes: 15

hellbreak
hellbreak

Reputation: 465

You should check your php.ini and look for the 'upload_tmp_dir' option. It is empty by default. After that, check the permission of your tmp dir. If you want to know what upload_tmp_dir your server is using, you can simply use this snippet of code

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

Finally in a terminal shell you can type : chmod -R 777 'your_tmp_upload_dir'

Upvotes: 7

stinkoid
stinkoid

Reputation: 41

You don't say what your platform is, but if it's a later version of Fedora (17+), the setting of PrivateTmp=true in the service file can cause this issue. Creating a service file in /etc with PrivateTmp=false is at least one way to fix that, although it involves rolling back a security feature.

Upvotes: 0

Padmanathan J
Padmanathan J

Reputation: 4620

Change permissions of the 'upload' directory. You'll need to give the web server access to it before it can move files into it..

Change your upload folder permission "Read only" to "Read & Write"

**Edited**

Read this link and also read this links. Its guide you how to change file permission.

Upvotes: 0

ITemius
ITemius

Reputation: 881

Possibly it is /tmp directory problem. Check that /tmp has correct access privileges and enough space size.

Upvotes: 1

Related Questions