За последние 24 часа нас посетили 17195 программистов и 1747 роботов. Сейчас ищут 934 программиста ...

Пример обработки файла отправленного методом post

Тема в разделе "PHP для новичков", создана пользователем borus, 24 мар 2015.

  1. borus

    borus Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    161
    Симпатии:
    0
    Здравствуйте.

    Есть страница которая сама себе отправляет файл методом post
    Как в php коде можно зацепиться за отправленный csv файл?
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  3. borus

    borus Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    161
    Симпатии:
    0
    Спасибо
    Вот такой код страницы пока есть:
    Код (Text):
    1.  
    2. <!DOCTYPE html>
    3. <html>
    4. <head>
    5. <meta charset="utf-8">
    6. <title>Отбор файлов без водяных знаков по списку названий файлов из csv файла</title>
    7. </head>
    8. <body>
    9. <p>Введите файл:</p>
    10. <form enctype="multipart/form-data" method="POST" >
    11. <input type="file">
    12. <input type="submit" value="Отобрать картинки!">
    13. </form>
    14. <?php
    15. if(isset ($_FILES['userfile']))
    16.     echo "Файл есть!<br/>";
    17. ?>
    18. </body>
    19. </html>
    Скажите пожалуйста, почему после выбора файла и нажатия на кнопку "Отобрать картинки!" после перезагрузки страницы не отображается "Файл есть!"
     
  4. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    var_dump();
     
  5. borus

    borus Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    161
    Симпатии:
    0
    Код:
    Код (Text):
    1. var_dump($_FILES);
    выдает:
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    у input type=file нет имени, а ты запросил userfile.

    если enctype="multipart/form-data" и mthod=post
    есть input type=file c именем myfile
    и выбран файл в этом input
    то после submit в массиве $_FILES['myfile'] будет информация о файле и путь к нему во временной папке.
    перечитай документацию, там хорошо описали последовательность.
     
  7. borus

    borus Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    161
    Симпатии:
    0
    Доброго времени суток!
    Да, я понял, спасибо.
    Получился вот такой простой код страницы, которая по загружаемому файлу начинает искать и отбирать требуемые фотографии из указанной папки "selected":
    Код (Text):
    1.  
    2. <?php
    3. function select_file($folder,$picture){
    4.     $i = 0;
    5.     $fp=opendir($folder);
    6.     while (false !== ($cv_file = readdir($fp))) {
    7.         if(is_file($folder."/".$cv_file)) {
    8.             $file_name = mb_substr($cv_file, mb_strrchr($cv_file, '/'));
    9.             if($file_name==$picture){
    10.                 copy($folder."/".$file_name, "selected/".$file_name);
    11.                 return true;
    12.             }
    13.         }
    14.         elseif($cv_file!="." && $cv_file!=".." && is_dir($folder."/".$cv_file)){
    15.             select_file($folder."/".$cv_file,$picture);
    16.         }
    17.         $i++;
    18.     }
    19.     closedir($fp);
    20. }
    21. ?>
    22. <!DOCTYPE html>
    23. <html>
    24. <head>
    25. <meta charset="utf-8">
    26. <title>Отбор файлов без водяных знаков по списку названий файлов из csv файла</title>
    27. </head>
    28. <body>
    29. <p>Введите файл:</p>
    30. <form enctype="multipart/form-data" method="POST" >
    31. <input type="file" name="userfile">
    32. <input type="submit" value="Отобрать картинки!">
    33. </form>
    34. <?php
    35. if(isset ($_FILES['userfile'])){
    36.     $fn = $_FILES["userfile"]["tmp_name"];
    37.     $fd = fopen($fn,  "r");
    38.     while (!feof($fd)){
    39.         $fields = fgetcsv($fd);
    40.         select_file("photo", $fields[0]);
    41.     }
    42. }
    43. ?>
    44. </body>
    45. </html>
    Возникли сомнения, что функция работает быстро. Есть подозрение, что как-то можно ускорить работу скрипта отбора. Подозрения падают на куски кода, отвечающих за
    1. чтение данных из csv файла - вот этот код:
    Код (Text):
    1. if(isset ($_FILES['userfile'])){
    2.     $fn = $_FILES["userfile"]["tmp_name"];
    3.     $fd = fopen($fn,  "r");
    4.     while (!feof($fd)){
    5.         $fields = fgetcsv($fd);
    6.         select_file("photo", $fields[0]);
    7.     }
    8. }
    2. проверку того что прочитанное из scv файла значение(имя картинки) есть в папке по которой производится поиск -вот этот код:
    Код (Text):
    1.  
    2. while (false !== ($cv_file = readdir($fp))) {
    3.         if(is_file($folder."/".$cv_file)) {
    4.             $file_name = mb_substr($cv_file, mb_strrchr($cv_file, '/'));
    5.             if($file_name==$picture){
    6.                 copy($folder."/".$file_name, "selected/".$file_name);
    7.                 return true;
    8.             }
    9.         }
    10.         elseif($cv_file!="." && $cv_file!=".." && is_dir($folder."/".$cv_file)){
    11.             select_file($folder."/".$cv_file,$picture);
    12.         }
    13.         $i++;
    14.     }
    Может можно обойтись как-то без while, считывающих по одному значению из файла и из сканируемой папки. Может есть какие-то "массивные" функции считывания всех значений из csv файла и всех файлов в проверяемой папке или ещё какие ускоряющие задачу функции?
     
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Кэшируй результат выполнения который можно использовать повторно.
    1. Получил csv файл, формируем массив (какой там у тебя формат?)
    https://php.net/manual/ru/function.str-getcsv.php
    Код (PHP):
    1. $csv = array_map('str_getcsv', file('data.csv')); 
    2. Получил список файлов из папки тоже массив https://php.net/manual/ru/function.scandir.php3. У тебя есть 2 массива, делай что хочешь.

    Задачи я не понял