Раньше я не обращал особого внимания на загрузку файлов. Вчера сделал простую операцию, но обнаружил, что там довольно много проблем.
Код программы в начале выглядит следующим образом:
загрузитьimg.php
<?php
//Определите, является ли это интерфейсом загрузки или интерфейсом реализации. Если это интерфейс загрузки, отобразите следующую HTML-страницу.
if(!$_POST['UploadAction']):
?>
<html>
<голова>
<title></title>
</голова>
<body><table><center>
<form enctype="multipart/form-data" name="SubmitForm" action="" метод="post">
<input type="hidden" name="UploadAction" value="1">
<tr><td><input name="UploadFile" type="file" size="30"></td></tr>
<tr><td><input type="submit" name="submit" value="Upload"></td>
<td><input type="reset" name="reset" value="Reset"></td></tr>
</форма>
</center></table></body>
</html>
<?php
//Если это страница реализации, отобразите следующую HTML-страницу и активируйте PHP-скрипт
еще:
?>
<html>
<голова>
<title></title>
</голова>
<тело>
<?php
//www.knowsky.com инициализирует статус UploadAction
$UploadAction=0;
$UploadFile=$_POST['UploadFile'];
if(($UploadFile!="none") && ($UploadFile!=""))
{
$UploadPath=$_SERVER['DOCUMENT_ROOT']."\";
if (!is_writeable($UploadPath))
{
echo "Каталог $UploadPath недоступен для записи!"; выход;
}
еще
{
echo "Каталог $UploadPath доступен для записи!";
}
$FileName=$UploadFile_name
если ($UploadFile_size<1024)
{
$FileSize=(строка)$UploadFile_size."byte";
}
elseif($UploadFile_size<(1024*1024))
{
$FileSize=number_format((double)($UploadFile_size/1024),1)."КБ";
}
еще
{
$FileSize=number_format((double)($UploadFile_size/(1024*1024)),1)."КБ";
}
if(!file_exists($UploadPath.$FileName))
{
если (move_uploaded_file($UploadFile,$UploadPath.$FileName))
{
echo "Файл $UploadFile_name ($FileSize) успешно загружен!";
}
еще
{
echo "Не удалось загрузить файл $UploadFile_name ($FileSize)!";
}
отсоединить ($UploadPath.$FileName);
}
еще
{
echo "Файл $UploadFile_name уже существует!";
}
}
еще
{
echo "Вы не выбрали ни одного файла для загрузки, или размер загруженного файла превышает $MAX_FILE_SIZE!";
}
?>
<br><a href="uploadimg.php">Возврат</a>
</тело>
</html>
<?php
endif
?>
Запустив его, я обнаружил, что загрузка вообще не имела никакого эффекта, и я даже не смог зайти на страницу реализации. После поиска и вопросов я узнал, что для получения загруженного файла необходим $_FILES,
поэтому я внес некоторые изменения:
$UploadFile=$_FILES['UploadFile']['tmp_name'];
$UploadFile_size=$_FILES['UploadFile']['size'];
$UploadFile_name=$_FILES['UploadFile']['name'];
$FileName=strtolower($UploadFile_name);
Я думал, что это уже будет сделано, но появилось сообщение об ошибке:
Предупреждение: move_uploaded_file(F:Serverwww): не удалось открыть поток: разрешение отклонено в F:Serverwwweooolfinishuploadimg.php в строке 76.
Предупреждение: move_uploaded_file(): невозможно переместить «E:WINDOWSTEMPphp34.tmp» в «F:\Server\www» в F:Serverwwweooolfinishuploadimg.php в строке 76.
Не удалось загрузить файл *****(****байт)!
И я проводил отладку в системе WIN, поэтому проблем с правами доступа к файлам быть не должно. Я смотрел, смотрел и думал об этом, но так и не смог разобраться. Я отправил сообщения Лао Лао и Джой о помощи. но я не получил правильного ответа. Простая загрузка файла заняла у меня больше суток, и я так и не смог ее сделать, что меня очень расстроило: я не смог найти в Интернете ошибок, подобных моей.
В конце концов, мне ничего не оставалось, как задуматься, почему я могу успешно загружать вложения при отладке саблогом? Поэтому я внимательно просмотрел исходный код для загрузки вложения в саблог и на основе кода внес следующие изменения:
функция getextension($filename) {
return substr(strrchr($filename, "."), 1);
}
$extension=getextension($FileName);
if(move_uploaded_file($UploadFile,$UploadPath."temp.".$extension))
//unlink($UploadFile);
unlink($UploadPath."temp.".$extension);
Результаты были получены сразу и загрузка прошла успешно!
Я использую unlink($UploadPath."temp.".$extension здесь, чтобы немедленно удалить файлы, загруженные в пространство, и сэкономить место);