Почему мой файловый скрипт php не перемещает файл?

Я загружаю файлы на сервер, используя php, и в то время как функция move_uploaded_file не возвращает никаких ошибок, файл не находится в папке назначения. Как вы можете видеть, я использую точный путь от root, а загружаемые файлы ниже максимального.

$target = "/data/array1/users/ultimate/public_html/Uploads/2010/"; //Write the info to the bioHold xml file. $xml = new DOMDocument(); $xml->load('bioHold.xml'); $xml->formatOutput = true; $root = $xml->firstChild; $player = $xml->createElement("player"); $image = $xml->createElement("image"); $image->setAttribute("loc", $target.basename($_FILES['image']['name'])); $player->appendChild($image); $name = $xml->createElement("name", $_POST['name']); $player->appendChild($name); $number = $xml->createElement("number", $_POST['number']); $player->appendChild($number); $ghettoYear = $xml->createElement("ghettoYear", $_POST['ghetto']); $player->appendChild($ghettoYear); $schoolYear = $xml->createElement("schoolYear", $_POST['school']); $player->appendChild($schoolYear); $bio = $xml->createElement("bio", $_POST['bio']); $player->appendChild($bio); $root->appendChild($player); $xml->save("bioHold.xml"); //Save the image to the server. $target = $target.basename($_FILES['image']['name']); if(is_uploaded_file($_FILES['image']['tmp_name'])) echo 'It is a file <br />'; if(!(move_uploaded_file($_FILES['image']['tmp_name'], $target))) { echo $_FILES['image']['error']."<br />"; } else { echo $_FILES['image']['error']."<br />"; echo $target; } 

Любая помощь приветствуется.

Эрик Р.

Чаще всего это проблема с разрешениями. Я предполагаю, что у вас нет прямого доступа к оболочке, чтобы напрямую проверять этот материал, так вот как это сделать изнутри скрипта:

Проверьте, существует ли $target каталог $target .

 $target = '/data/etc....'; if (!is_dir($target)) { die("Directory $target is not a directory"); } 

Проверьте, можно ли его записать:

 if (!is_writable($target)) { die("Directory $target is not writeable"); } 

Убедитесь, что полное имя файла цели существует / доступно для записи – возможно, оно существует, но не может быть перезаписано:

  $target = $target . basename($_FILES['image']['name']); if (!is_writeable($target)) { die("File $target isn't writeable"); } 

За гранью этого:

 if(!(move_uploaded_file($_FILES['image']['tmp_name'], $target))) { echo $_FILES['image']['error']."<br />"; } 

Повторение параметра error здесь бесполезно, оно относится исключительно к процессу загрузки. Если файл был загружен правильно, но его нельзя было перенести, он будет по-прежнему вызывать только 0 (например, константу UPLOAD_ERR_OK). Правильный способ проверки ошибок выглядит примерно так:

 if ($_FILES['images']['error'] === UPLOAD_ERR_OK) { // file was properly uploaded if (!is_uploaded_File(...)) { die("Something done goofed - not uploaded file"); } if (!move_uploaded_file(...)) { echo "Couldn't move file, possible diagnostic information:" print_r(error_get_last()); die(); } } else { die("Upload failed with error {$_FILES['images']['error']}"); } 

Вы должны убедиться, что у того, кто размещает ваши страницы, настроены параметры, позволяющие загружать и перемещать файлы. Большинство из них отключит эти функции, так как это серьезный риск.

Просто отправьте их по электронной почте и спросите, включены ли они.

Надеюсь это поможет.

ваши обращения к is_uploaded_file и move_uploaded_file различаются. для is_uploaded_file вы проверяете имя и имя move_uploaded_file, которое вы передаете в 'tmp_name'. попробуйте изменить свой вызов на move_uploaded_file, чтобы использовать 'name'