Не удалось создать временный файл во время загрузки
При попытке загрузить файл с помощью формы и PHP/IIS 7 я получаю следующее сообщение:
PHP Warning: File upload error - unable to create a temporary file in Unknown on line 0
Моя форма:
<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>
$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.";
}
Я установил путь для временных файлов:
upload_tmp_dir = "C:/Users/server/Pictures/tmp"
И предоставил разрешения для IIS_IUSRS и IUSR с полным контролем. Но каждый раз я получаю ошибку. Я не знаю, что я делаю не так. Если бы кто-нибудь мог мне помочь, это было бы здорово.
2 answers
Заставил это сработать.
Изменено
upload_tmp_dir = "C:/Users/server/Pictures/tmp" to "C:\TEMP".
Создайте временную папку в C и предоставьте разрешения. Похоже, это работает только при прямом подключении к C:.
Я наконец-то выяснил, почему на самом деле происходит эта ошибка:
Учетная запись IUSR (или учетная запись, которую олицетворяет процесс php, в зависимости от настроек аутентификации) должна иметь возможность перечислять Родительскую папку папки upload_tmp_dir.
Такое поведение странно, потому что это право не требуется для папок журнала или сеансов.
Мое решение заключается в следующем (используя пути из приведенного выше сообщения):
- Создайте папку "C:/Users/server/Pictures/tmp "
- Предоставьте права на изменение IUSR (или другому пользователю) в этой папке
- Создайте папку"C:/Users/server/Pictures/tmp/uploads "
- Редактировать php.ini: upload_tmp_dir= "C:/Users/server/Pictures/tmp/uploads "
В качестве альтернативы вы можете предоставить права только на чтение "только для этой папки" в родительской папке"C:/Users/server/Pictures/tmp ". В этом случае вам не нужна другая вложенная папка.