Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unable to create a temporary file while uploading

While trying to upload a file using a form and PHP/IIS 7, I get this message:

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

My form:

<form action="acciones.php" id="form3" method="POST" enctype="multipart/form-data">
    <input type="hidden" value="3" name="accion">
    <input type="text" name="nombre" placeholder="Nombre">
        <input type="file" name="imagen" accept="image/x-png, image/gif, image/jpeg" />
    <input type="button" id="envio" class="button azul" value="Agregar" onclick="envios()">
</form>

My PHP code and reference:

$target = "/images/";
$target = $target . basename( $_FILES['imagen']['name']);
//This gets all the other information from the form
$name=$_POST['nombre'];
$pic=($_FILES['imagen']['name']);

//Writes the information to the database
$query = "INSERT INTO Playeras (Nombre, Ruta) VALUES ('$name', $pic')";
mysql_query($query, $conexion -> conn) or die("Error: ".mysql_error()) ;

//Writes the photo to the server
if(move_uploaded_file($_FILES['imagen']['tmp_name'], $target))
{
    //Tells you if its all ok
    echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded, and your information has been added to the directory";
}
else 
{
 //Gives and error if its not
 echo "Sorry, there was a problem uploading your file.";
}

I've set the path for the temp files:

upload_tmp_dir = "C:/Users/server/Pictures/tmp"

And gave permissions for IIS_IUSRS and IUSRS with total control. But every time, I get the error. I don't know what I'm doing wrong. If someone can help me, it would be great.

like image 667
aerojun Avatar asked May 10 '13 18:05

aerojun


People also ask

How do I fix unable to create a temporary file?

Creating an executable file requires creation of temporary files. This error has the following cause and solution: The drive that contains the directory specified by the TEMP environment variable is full. Delete files from the full drive or specify a different drive in the TEMP environment variable.

How temporary files are created?

Temporary files, also called temp or tmp files, are created by Windows or programs on your computer to hold data while a permanent file is being written or updated. The data will be transferred to a permanent file when the task is complete, or when the program is closed.

What is considered a temporary file?

Alternatively referred to as a foo file, a temporary file or temp file is a file created to hold information while a file's being created or modified. After the program is closed, the temporary file is deleted. Temporary files store and move data, manage settings, help recover lost data, and manage multiple users.


2 Answers

Made it work.

Changed

upload_tmp_dir = "C:/Users/server/Pictures/tmp" to "C:\TEMP".

Create the folder TEMP in C and gave the permissions. Seems like it only works when connecting to C: directly.

like image 134
aerojun Avatar answered Sep 28 '22 03:09

aerojun


I finaly found out, why this error actually happens:

The IUSR Account (or the account the php process impersonates, depending on your authentication settings) needs to be able to enumerate the Parent Folder of the upload_tmp_dir folder.

This behaviour is odd, because this right is not needed for the log or sessions folders.

My Solution is the following (using the paths from above post):

  1. Create the folder "C:/Users/server/Pictures/tmp"
  2. Grant modify rights to IUSR (or other user) on that folder
  3. Create the folder "C:/Users/server/Pictures/tmp/uploads"
  4. Edit php.ini: upload_tmp_dir = "C:/Users/server/Pictures/tmp/uploads"

Alternatively you can grant read only rights on "this folder only" on the parent folder "C:/Users/server/Pictures/tmp". In that case you dont need another subfolder.

like image 44
japi Avatar answered Sep 28 '22 03:09

japi