Почему мой скрипт php move file не перемещает файл? - PullRequest
0 голосов
/ 30 июля 2010

Я загружаю файлы на сервер с помощью 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;   
}

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

Эрик Р.

Ответы [ 3 ]

1 голос
/ 30 июля 2010

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

Проверьте, существует ли каталог $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']}");
}
1 голос
/ 30 июля 2010

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

Просто напишите им и спросите, включены ли они.

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

0 голосов
/ 30 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...