问题
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> </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 .
回答1:
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).
回答2:
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'
回答3:
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.
回答4:
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.
回答5:
Possibly it is /tmp directory problem. Check that /tmp has correct access privileges and enough space size.
回答6:
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.
回答7:
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.
回答8:
In my case it was caused by running httpd.exe Apache server from console instead of service.
回答9:
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
来源:https://stackoverflow.com/questions/18395163/warning-file-upload-error-unable-to-create-a-temporary-file-in-unknown-on-lin