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