Функция перемещения загруженного файла в php не работает

Ниже приведен мой фрагмент кода, который перемещает файл в определенный каталог.

foreach($files as $dir_file)    //Getting Path of XML file
        {
            echo "\nDir Files: ".$dir_file."\n";

            if($dir_file != "." && $dir_file != "..")
            {
                if(strpos($dir_file,'.xml'))     
                {
                    echo "\nXML file found\n";
                    $xmlPath=$path."/".$dir_file;
                    // return ReadXML($xmlPath);
                }
                if(strpos($dir_file,'.JPG'))
                {
                    echo "\n FOund \n";
                    $ret=move_uploaded_file($dir_file, 'upload/'.$dir_file));
                     echo "\n retunr values: ".$ret;
                }  
            }

Я проверил все разрешения, и это 777. но функция перемещения файла загрузки не перемещает мой файл в конкретный каталог. он также ничего не возвращает. Что я делаю не так?


php
person Muneem Habib    schedule 01.11.2013    source источник
comment
Вы можете показать, как выглядят $ files?   -  person Subedi Kishor    schedule 01.11.2013
comment
Сначала включите отчет об ошибках: stackoverflow.com/questions/845021/ Если вы по-прежнему не можете определить проблему по сообщению об ошибке, опубликуйте сообщение об ошибке здесь.   -  person Sam Dufel    schedule 01.11.2013
comment
Всегда ли это файлы, которые были только что загружены (т.е. в том же самом скрипте)? Если это просто файлы в файловой системе, вы можете захотеть rename(...) вместо move_uploaded_file(...) (php.net/manual/en/function.rename.php)   -  person Clart Tent    schedule 01.11.2013
comment
это просто файлы изображений, и я запускаю их через терминал SSH   -  person Muneem Habib    schedule 01.11.2013
comment
Вы пытаетесь загрузить файл, используя путь к файлу xml?   -  person Krish R    schedule 01.11.2013
comment
сэр, у меня есть файлы, помещенные в каталог, я хочу переместить эти файлы в другие папки   -  person Muneem Habib    schedule 01.11.2013
comment
Если вы пытаетесь переместить файлы из одного каталога в другой, обратите внимание на php .net / manual / en / function.copy.php, и это может быть вам полезно stackoverflow.com/questions/2082138/   -  person Subedi Kishor    schedule 01.11.2013
comment
Значит, эти файлы не были просто загружены через HTTP-запрос ?!   -  person deceze♦    schedule 01.11.2013
comment
В этом случае вам нужно использовать функцию копирования, и после того, как она будет скопирована, вам нужно будет отключить файл.   -  person Krish R    schedule 01.11.2013
comment
функция переименования вырезать файлы и вставить в желаемое место, я не хочу, чтобы он вырезал файлы, которые я хочу скопировать   -  person Muneem Habib    schedule 01.11.2013
comment
Тогда используйте copy.   -  person deceze♦    schedule 01.11.2013


Ответы (2)


Если вы хотите переместить файлы из одного каталога в другой, вы должны использовать copy () функция.

Это пример кода:

$source = "YOUR_SOURCE_DIRECTORY/";
$destination = "YOUR_DESTINATION_DIRECTORY/";

foreach ($files as $file) {
    if (in_array($file, array(".","..")))
        continue;

    //If file is copied successfully then mark it for deletion
    if (copy($source.$file, $destination.$file)) {
        $delete[] = $source.$file;
    }
}
//If you want to delete the copied files then include these lines
//Delete all successfully copied files
foreach($delete as $file) {
    unlink($file);
}
person Subedi Kishor    schedule 01.11.2013

move_uploaded_file

Эта функция проверяет, является ли файл, обозначенный именем filename, допустимым загружаемым файлом (это означает, что он был загружен с помощью механизма загрузки PHP HTTP POST). Если файл действительный, он будет перемещен в имя файла, указанное в месте назначения.

(Подчеркну мой.) Вы можете использовать move_uploaded_file только для перемещения загруженных файлов, где загруженный означает, что PHP получил файл в текущем запросе, а файл в настоящее время находится в $_FILES суперглобале. Любой другой файл не может быть перемещен пользователем move_uploaded_file. Это сделано специально, move_uploaded_file призвано защитить вас от вас самих и убедиться, что вы перемещаете только файлы, загруженные пользователем.

Если вы хотите переместить любой другой файл, который не был только что загружен через HTTP POST, используйте copy или rename.

person deceze♦    schedule 01.11.2013