Ответы пользователя по тегу PHP
  • Как организовать лимит на количество скачиваний в день?

    Keksinautin
    @Keksinautin
    Software Engineer
    "Единственным решением на данный момент кажется ограничение по IP адресу, но если много пользователей зайдёт с одним IP, то есть вероятность что часть из них ничего скачать не сможет." - а разве ни этого Вы хотите?

    Если Вы хотите ограничить кол-во скачиваний персонально по пользователям, то Вам их надо идентифицировать. Все варианты идентификации без авторизации можно обойти. Тут либо одно, либо другое.
    Если дело только в нагрузке, можете заставлять их подождать скачивания, как это делают многие сервисы обмена файлами.
    Ответ написан
    Комментировать
  • Как правильно использовать namespace в PHP?

    Keksinautin
    @Keksinautin
    Software Engineer
    Помогите мне, пожалуйста, раз и навсегда понять как использовать namespace.
    В особенности меня интересует автозагрука.

    Интересная формулировка, потому что использование неймспесов не предполагает атоподгрузку. Это разные вещи. Если Вы написали:
    use MyNamespace\DB;
    Это еще не значит, что php сам поймет где у вас файлик с этим классом и сам его вам заинклюдит. В отличие от других языков, модель "автоподгрузки" в php надо реализовывать практически самостоятельно. Или использовать готовые автолоадеры, вроде "composer autoload". По автолоаду почитать тут, по неймспейсам тут.
    Ответ написан
    Комментировать
  • Как тестировать взаимодействие с БД PHPUnit?

    Keksinautin
    @Keksinautin
    Software Engineer
    Модульным наверно уже не является. Я бы назвал его "интеграционным", потому что мы тестируем как работает ваш код совместно с базой.
    Суть заключается в том, что мы (в случае записи в базу) подаем на вход методу данные, а потом проверяем, что мы получили в базе, причем без использования нашего кода. В случае чтения наоборот, сначала сторонними средствами создаем записи, а потом проверяем, как они прочитаются.
    Я в таких тестах всегда поступал следующим образом:
    1. Создаем "дата-провайдера" - который в декларативной форме описывает параметры: "что на входе метода" и "что в базе" или "что в базе" и "что на выходе метода".
    2. У нас есть прямой доступ к базе, с помощью него в каждом тесте мы либо создаем запись в базе, либо проверяем, что туда записал тестируемый метод.
    Но думаю, такими тестами не стоит сильно увлекаться, ведь они по сути просто проверяют, что вы правильно составили запрос.
    Ответ написан
    2 комментария
  • Как отправить push-уведомление (Nginx, PHP)?

    Keksinautin
    @Keksinautin
    Software Engineer
    Если я правильно понял, задача состоит в том, чтобы асинхронно выгрузить на сервер 20 картинок (которые там должны быть обработаны после загрузки) и, само собой, узнать о том, как все это прошло.
    Во первых у меня большие сомнения насчет 20 одновременных соединений с сервером. Браузеры ограничивают количество одновременных соединений к одному серверу. Может быть 20 одновременно и не получится, надо гуглить для каждого браузера эти значения.
    Во вторых я бы использовал для этого такую схему:
    1. Nginx HttpUploadModule загружает файл и только после этого проксирует запрос дальше, серверу который будут выполнять обработку файла. В нашем случае PHP.
    2. А HttpUploadProgressModule поможет нам отслеживать процесс загрузки файла.
    3. Соответственно, когда собрали ответы обо всех успешных 20 загрузках на фронт-енде уже может делать что хотим.
    Ответ написан
  • PHP file_get_contents даёт 404, с браузера грузится?

    Keksinautin
    @Keksinautin
    Software Engineer
    А у вас хоть одну страницу (любую) так загрузить получается?
    Я к тому, что адрес для file_get_contents нужно указывать вместе с http://
    или вы ошибку только тут в описании допустили?

    Плюс, я бы рекомендовал использовать что-то вроде этого:
    $context = stream_context_create(
        [
            'http' => [
                 'method' => 'GET',
                 'protocol_version' => '1.1',
                 'header' => [
    			'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0',
    			'Connection: close',
                 ],
        ]
    );
    $stream = fopen('http://url', 'r', false, $context);
    $content =  stream_get_contents($stream); //тут получаем страницу
    $data = stream_get_meta_data($stream); //тут получаем информацию, в том числе заголовки ответа
    Ответ написан
  • Почему при загрузке страницы отображается пустая страница PHP?

    Keksinautin
    @Keksinautin
    Software Engineer
    Нужно как можно больше информации.
    1. На какой операционной системе работает сервер.
    2. Где размещен сервер, на локальной машине или на удаленной.
    Если на удаленной, то что это: VDS, просто виртуальный хостинг или же вообще dedicated.
    3. Какой http-сервер, его версия и конфиги.
    Запущен ли php как модуль apache, или используется php-fpm или еще что-то.
    4. Конфиг php, и какая версия.
    5. Как устанавливался сервера и php (из пакетного менеджера, отдельно пакетом, сборка из исходников, еще какой-нибудь вариант).
    6. Включен ли какой-либо фаервол, по возможности: его версия и конфиг.
    7. Если возможно хотя бы часть кода, дающего ошибку.
    8. Если возможно заголовки ответа сервера во время ошибки.
    Ответ написан
    3 комментария
  • Почему phpstorm не распознаёт один php файл?

    Keksinautin
    @Keksinautin
    Software Engineer
    У меня была такая проблема. Суть в том, что файл (полное имя) прописался в паттерн к другому типу файлов.
    Открываете тот самый File -> Settings -> File Types,
    а там ищите свой файл в "Registered Patterns" среди других типов данных.

    Скорее всего он в "Files opened in associated applications" попал.
    Ответ написан
    4 комментария
  • Сравнение контрольных сумм файлов

    Keksinautin
    @Keksinautin
    Software Engineer
    Если Linux то kdiif3, если винда, то winmerge. Или я не правильно понял вопрос?
    p.s. Утилит-то гораздо больше, это те, что первыми приходят на ум.
    Ответ написан
    1 комментарий
  • Написание cms. Python vs Php.

    Keksinautin
    @Keksinautin
    Software Engineer

    Можно спускаться сверху вниз: - пользовались WordPress - отлично, так продолжайте его изучать, параллельно с изучением PHP в целом. Пишите модули, изучайте решение самых популярных проблем на примере архитектуры этой CMC. - посмотрите в сторону других СМС, покопайтесь, пощупайте. - далее можно спустится к фреймворкам, опять же, используя предыдущий опыт, посмотрите, что Вам больше нравится. - затем можете попытаться написать что-то совсем свое на чистом php. Аналогично и с Python, только я не знаком с CMC на нем.

    Можно подниматься снизу вверх: - начать изучать сам язык, и выбрать для решения текущих задач тот, который больше нравится и больше подходит. - пробовать решать возникающие проблемы самостоятельно, параллельно подглядывая решения во фреймворках и СМС.

    Какой путь выбрать в Вашем случае, зависит еще и от того, что нужно сейчас. Если нужно поддерживать сайт на какой-то СМС, то первый, если нужно решение нестандартной задачи, то проще это сделать на чистом языке и дальше уже как пойдет.

    Ответ написан
    1 комментарий