Здравствуйте. Есть страница которая сама себе отправляет файл методом post Как в php коде можно зацепиться за отправленный csv файл?
https://php.net/manual/ru/features.file-upload.php https://php.net/manual/ru/features.file-upload.post-method.php $_FILES['userfile']['tmp_name'] Временное имя, с которым принятый файл был сохранен на сервере.
Спасибо Вот такой код страницы пока есть: Код (Text): <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Отбор файлов без водяных знаков по списку названий файлов из csv файла</title> </head> <body> <p>Введите файл:</p> <form enctype="multipart/form-data" method="POST" > <input type="file"> <input type="submit" value="Отобрать картинки!"> </form> <?php if(isset ($_FILES['userfile'])) echo "Файл есть!<br/>"; ?> </body> </html> Скажите пожалуйста, почему после выбора файла и нажатия на кнопку "Отобрать картинки!" после перезагрузки страницы не отображается "Файл есть!"
у input type=file нет имени, а ты запросил userfile. если enctype="multipart/form-data" и mthod=post есть input type=file c именем myfile и выбран файл в этом input то после submit в массиве $_FILES['myfile'] будет информация о файле и путь к нему во временной папке. перечитай документацию, там хорошо описали последовательность.
Доброго времени суток! Да, я понял, спасибо. Получился вот такой простой код страницы, которая по загружаемому файлу начинает искать и отбирать требуемые фотографии из указанной папки "selected": Код (Text): <?php function select_file($folder,$picture){ $i = 0; $fp=opendir($folder); while (false !== ($cv_file = readdir($fp))) { if(is_file($folder."/".$cv_file)) { $file_name = mb_substr($cv_file, mb_strrchr($cv_file, '/')); if($file_name==$picture){ copy($folder."/".$file_name, "selected/".$file_name); return true; } } elseif($cv_file!="." && $cv_file!=".." && is_dir($folder."/".$cv_file)){ select_file($folder."/".$cv_file,$picture); } $i++; } closedir($fp); } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Отбор файлов без водяных знаков по списку названий файлов из csv файла</title> </head> <body> <p>Введите файл:</p> <form enctype="multipart/form-data" method="POST" > <input type="file" name="userfile"> <input type="submit" value="Отобрать картинки!"> </form> <?php if(isset ($_FILES['userfile'])){ $fn = $_FILES["userfile"]["tmp_name"]; $fd = fopen($fn, "r"); while (!feof($fd)){ $fields = fgetcsv($fd); select_file("photo", $fields[0]); } } ?> </body> </html> Возникли сомнения, что функция работает быстро. Есть подозрение, что как-то можно ускорить работу скрипта отбора. Подозрения падают на куски кода, отвечающих за 1. чтение данных из csv файла - вот этот код: Код (Text): if(isset ($_FILES['userfile'])){ $fn = $_FILES["userfile"]["tmp_name"]; $fd = fopen($fn, "r"); while (!feof($fd)){ $fields = fgetcsv($fd); select_file("photo", $fields[0]); } } 2. проверку того что прочитанное из scv файла значение(имя картинки) есть в папке по которой производится поиск -вот этот код: Код (Text): while (false !== ($cv_file = readdir($fp))) { if(is_file($folder."/".$cv_file)) { $file_name = mb_substr($cv_file, mb_strrchr($cv_file, '/')); if($file_name==$picture){ copy($folder."/".$file_name, "selected/".$file_name); return true; } } elseif($cv_file!="." && $cv_file!=".." && is_dir($folder."/".$cv_file)){ select_file($folder."/".$cv_file,$picture); } $i++; } Может можно обойтись как-то без while, считывающих по одному значению из файла и из сканируемой папки. Может есть какие-то "массивные" функции считывания всех значений из csv файла и всех файлов в проверяемой папке или ещё какие ускоряющие задачу функции?
Кэшируй результат выполнения который можно использовать повторно. 1. Получил csv файл, формируем массив (какой там у тебя формат?) https://php.net/manual/ru/function.str-getcsv.php Код (PHP): $csv = array_map('str_getcsv', file('data.csv')); 2. Получил список файлов из папки тоже массив https://php.net/manual/ru/function.scandir.php3. У тебя есть 2 массива, делай что хочешь. Задачи я не понял