За последние 24 часа нас посетили 74170 программистов и 10170 роботов. Сейчас ищут 2489 программистов ...

Как передать загруженный файл "по цепочке" между скриптами

Тема в разделе "PHP для новичков", создана пользователем VaRela, 8 фев 2017.

  1. VaRela

    VaRela Новичок

    С нами с:
    8 фев 2017
    Сообщения:
    4
    Симпатии:
    0
    Доброе время суток Уважаемые.
    Опыт программирования в PHP небольшой, и недавно столкнулся вот с какой проблемой:

    Есть три странички, которые должны открываться одна после другой:

    1. select_file.php на которой я указываю файл для загрузки и нажимаю кнопку "Продолжить"
    2. check_file_data.php на которой я проверяю содержимое файла и показываю сообщение об ошибках, в нем также есть кнопка "Продолжить"
    3. import_data.php скрипт загрузки данных из этого файла в БД

    Я передаю файл через обычный "input" типа "file", в форме методом POST. В файле check_file_data.php я получаю его вот так:

    Код (Text):
    1. if ($_FILES['filename']['error'] == 0)
    2. {
    3.     if (is_uploaded_file($_FILES['filename']['tmp_name']))
    4.     {
    5.         if (is_readable($_FILES['filename']['tmp_name']))
    6.         {
    7.             $locCSV = new TiceCSVReader($_FILES['filename']['tmp_name'], $_POST["encoding"], (isset($_POST["has_header"]) ? True : False));
    8. .....
    9. .....
    10.         }
    11.     }
    12. }
    Передача файла из первого скрипта во второй работает отлично, но я не пойму как реализовать передачу полученного файла дальше в import_data.php. Насколько я понимаю, временный файл с именем $_FILES['filename']['tmp_name'], полученный в скрипте check_file_data.php умрет сразу же после завершения его выполнения, т.е. к моменту открытия import_data.php файла уже не будет.
    Или я все-таки ошибаюсь?

    Посоветуйте как быть?
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.012
    Симпатии:
    1.679
    Адрес:
    :сердА
    1 и 2 пункты можно и нужно реализовать на стороне клиента. Третий уже на стороне сервера, и там же финальную проверку на случай подделки данных.
     
  3. VaRela

    VaRela Новичок

    С нами с:
    8 фев 2017
    Сообщения:
    4
    Симпатии:
    0
    Боюсь второй пункт нельзя реализовать на стороне клиента, т.к. проверка валидности файла подразумевает работу с БД. AJAX использовать как-то не хочется...
     
  4. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    Если пользователь отправляет файл с ошибками, то этот файл тебе по-любому в таком виде не нужен. Соответственно и сохранять его ты не будешь. А если с файлом все ок, тогда тебе не нужно выводить сообщения об ошибках, так как с файлом все в порядке.
    Так не проще ли сделать два скрипта? Во втором скрипте ты проверяешь соответствие файла твоим требованиям. Если все нормально, то загружаешь его на сервер. В противном случае указываешь на ошибке в файле.
     
  5. VaRela

    VaRela Новичок

    С нами с:
    8 фев 2017
    Сообщения:
    4
    Симпатии:
    0
    Не совсем так. Второй скрипт это как-бы "предварительный просмотр" при импорте, он нужен при любом раскладе.
     
  6. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    Ты бы поподробнее объяснил задачу: что за файл, что за проверка. Может быть здесь придумали бы какое-то интересное решение для твоей задачи.
     
  7. VaRela

    VaRela Новичок

    С нами с:
    8 фев 2017
    Сообщения:
    4
    Симпатии:
    0
    Это небольшая надстройка к биллингу. Основная задача загружать данные в виде CSV или XML файлов. На втором этапе (на серверной стороне) файл анализируется и проверяется на ошибки, а пользователю отображается сводная информация о том, сколько строк будет загружено, сколько из них будет добавлено, сколько обновлено, сколько с ошибками и т.д. На основании этих данных пользователь принимает решение о продолжении или отмене дальнейшей загрузки файла. Сейчас у меня в первом скрипте две кнопки: "Проверить" и "Загрузить", "Проверить" открывает второй скрипт, а "Загрузить" третий, т.е. я сначала проверяю файл, потом возвращаюсь назад, и жму кнопку "Загрузить", что не очень удобно.