Как стать автором
Обновить

Комментарии 9

За stream_context_set_params поставил плюс статье, не знал что можно получать коллбэки при загрузке файла, в остальном же код нужно перерабатывать потому что меня не покидает ощущение что это статья была написана во времена PHP 5

@Vitaly48 Спасибо за то, что прокомментировали, а почему во времена PHP 5, я много чего неправильно сделал? Подскажите, если есть время...

в целом код рабочий, но есть некоторые моменты

  1. хранение конфига в json избыточно, достаточно создать файл config.php и в нём хранить массив, тогда не нужно будет делать чтение файла и декодинг, код сократиться до такой строки
    $config = include __DIR__ . 'config.php';

  2. spl_autoload_register сейчас обычно не пишут свой загрузчик, а используют composer, это даёт стандартизацию, плюс позволяет легко подключать сторонние библиотеки, но для такого маленького проекта можно обойтись и со своим кастомным загрузчиком, но если упрощать то я бы вообще от него избавился в пользу обычного include

  3. очень давно не видел чтобы кто-то использовал суперглобальный массив $_ENV, я бы для этого написал какой нибудь класс Config который бы отвечал за работу с настройками, как минимум в будущем при подключении библиотеки читающей из .env файлов не будет конфликтов

  4. обычно index.php файлы открываются из браузера, это мелочь, но вводит в заблуждение, я бы переименовал

  5. названия методов путают, searchSourceFileOnWebPage называется search, но внутри он не только ищет, но и скачивает файл.

    метод getFileInOurFolder напрямую читает настройки из $_ENV, лучше передавать все настройки в конструкторе, это отвяжет ваш класс от остального кода и в будущем позволит удобно покрыть код тестами

  6. в методах не используются тайп хинты, из-за этого непонятно какие типы данных принимает метод и что он возвращает

  7. ещё как то много пробелов между строк, но полагаю это проблема редактора хабра

если вы пишите код для себя, пишите как вам удобно и комфортно, но вот при совместной разработке стоит подтянуть свой навык написания кода под современные стандарты

очень давно не видел чтобы кто-то использовал суперглобальный массив $_ENV

Так здрасть, наоборот же сейчас всё через дотенв идёт, который шарит всё в энв, а потом уже из энва в конфиги попадает.

// .env
SOURCE_URI=https://opendata.mkrf.ru/opendata/7705851331-museum-exhibits/

Потом:

require __DIR__ . '/vendor/autoload.php';

(new Dotenv())->load(...);

А уже потом:

// config.php
return [
    'uri' => $_ENV['SOURCE_URI'] 
        ?? $_SERVER['SOURCE_URI'] 
        ?? throw new DomainException('Source uri configuration required'),
    // ...
];

А так да, в целом согласен, код времён PHP 4/5. Сейчас так уже почти не пишут, только разве что начинающие.

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

В итоге может получится так что при подключении библиотеки DotEnv она перезатрёт исходный $_ENV['conf']

А, ну значит не правильно вас понял. Просто там было "очень давно не видел чтобы кто-то использовал суперглобальный массив $_ENV", вот я как бы и удивился, т.к. параметры окружения нынче уже мейнстримом стали вообще для всего, как и сам дотенв.

Можно вообще почти не писать кода для автозагрузки:

set_include_path(__DIR__.'/src/');
spl_autoload_extensions('.php');
spl_autoload_register();

После этого из папки src начнут грузиться классы. Только есть одна мелочь - имена файлов должны быть переведены в нижний регистр.

@Vitaliy48Спасибо за полезное review!

А как же composer? Он позволит не только использовать автозагрузку классов, но и легко подключать внешние библиотеки. Например, когда я пытался разобрать архив со старым форумом из веб-архива, то использовал symfony/dom-crawler для разбора HTML. Она была не первой библиотекой, которую я использовал. Но после экспериментов, оказалось что эта библиотека самая быстрая и не спотыкается на некоторых страницах, где хитрые имена пользователей были. Из-за них другие библиотеки теряли часть данных. А эта работает быстро и декодирует правильно.

Недавно столкнулся с необходимостью загрузки файла размером в мегабайт, который нужно обработать. Он в csv формате и его можно читать построчно. С помощью symfony/filesystem получаю имя временного файла, гружу в него прямо через shell с помощью curl, после чего уже на PHP приступаю к разбору строк. Curl отлично визуализирует загрузку и никакого кода не надо писать для этого.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории