• Как выполнить php artisan на хостинге?

    muhammad_97
    @muhammad_97
    PHP-разработчик
    Сделать можно и на обычном хостинге используя Artisan::call:

    Artisan::call(string $command, array $parameters, BufferedOutput $output);

    Пример:
    use Symfony\Component\Console\Output\BufferedOutput;
    ...
    public function migrate()
    {
    	$output = new BufferedOutput;
    
    	try {
    		Artisan::call('migrate', array('--force' => true), $output);	
    	} catch (Exception $e) {
    		throw Exception($e->getMessage());
    	}
    
    	return $output->fetch();
    }
    Ответ написан
    Комментировать
  • Какие преимущества использования связей mysql?

    @shagguboy
    невозможность бардака в базе данных.
    Ответ написан
    Комментировать
  • Какие преимущества использования связей mysql?

    @svetlov97
    Гуглите лучше, тык
    Потому что информация, нужная пользователям БД, как правило распределена по нескольким сущностям. Связи - для того, чтобы понять, какая информация к чему относится.
    Анастасия Дук: реляционная модель БД требует, чтобы любая информация находилась в БД в единственном экземляре, это требование непротиворечивости.
    Ответ написан
    Комментировать
  • Какие преимущества использования связей mysql?

    @entermix
    Это предотвращает нарушение целостности, индексы ускоряют работу БД.

    Вам не нужно, к примеру, удалять все сообщения, которые добавил пользователь, база данных сделает это самостоятельно при удалении их владельца, база данных не позволит удалить сущность, если присутствуют обязательные зависимости, триггеры позволяют выполнить действия на стороне БД после определенных событий и т.д.
    Ответ написан
    2 комментария
  • Вывод даты в нужном виде. Как сделать?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Если абстрагироваться от того, что вы используете для работы с MySQL deprecated-расширение и не используете prepared statements, то проблема ваша как минимум в том, что вы не читали документацию:
    php.net/manual/ru/function.mysql-query.php
    Для запросов SELECT, SHOW, DESCRIBE, EXPLAIN и других запросов, возвращающих результат из нескольких рядов, mysql_query() возвращает дескриптор результата запроса (resource), или FALSE в случае ошибки.


    Вы получили дескриптор и пытаетесь с ним работать как с массивом.
    Ответ написан
    Комментировать
  • Как создать своё API (php)?

    ivanvorobei
    @ivanvorobei
    iOS разработчик, канал https://t.me/sparrowcode
    Была такая необходимость, сначала писал свой с нуля. После образумился и прошелся по документации Laravel, теперь простые API разворачиваю сам за пару часов
    Ответ написан
    Комментировать
  • Как получать информацию о видео php?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Повальсировать с бубном всё же придётся. Надо установить/скачать на сервер ffmpeg и его утилиту ffprobe, которая даёт инфу о медиафайле. Через exec() выполнить её и распарсить ответ:
    <?php
    $filename = "test.mp4";
    $cmd = sprintf('ffprobe -v quiet -show_streams -of json "%s"', $filename);
    $output = array();
    exec(  $cmd, $output);
    $data = json_decode( implode('', $output));
    
    $width = $height = 0;
    if( $data  &&  isset($data->streams) && is_array($data->streams)  &&  count($data->streams)) {
    	foreach( $data->streams AS $i => $stream) {
    		if( isset( $stream->width, $stream->height)) {
    			$width = $stream->width;
    			$height = $stream->height;
    			break;
    		}
    	}
    }
    
    echo "Video is ${width}x$height\n"; // Video is 400x224
    Ответ написан
    Комментировать
  • Парсинг Яндекс.Поиск - как отправить каптчу?

    dummyman
    @dummyman
    диссидент-схизматик
    Во первых, Хром, Хромиум, Сафари посылают уникальный id запроса в заголовочниках, как User-Agent лучше использовать Фаирлис. А в остальном могу лишь посоветовать скриптовые браузеры CasperJS, PhantomJS или SlimerJS. Они по-идее глубже эмулируют процесс человекоприсутствия

    Вот например парсинг выдачи гугла
    docs.casperjs.org/en/latest/quickstart.html
    Ответ написан
    Комментировать
  • Есть ли клиент для чтение записей тостера?

    @MoonMaster
    Программист и этим все сказано
    Давно тоже интересовался этим вопросом и нашел только клиент для Androida, с которого можно читать хабр и гиктаймс. Интересовался у разработчиков на эту тему, сказали, что для тостера нет и не планируется выводить отдельное приложение.
    Ответ написан
    3 комментария
  • Есть ли клиент для чтение записей тостера?

    Есть - браузер. Мобильного приложения нет и не планируется, десктопных клиентов тоже не видел.
    Ответ написан
    Комментировать
  • Как сделать вывод всех файлов в папках и подпапках + сортировка по размеру?

    0lorin
    @0lorin
    программист
    В SPL есть классы для работы с этим делом — код получается красивее.
    По теме я не знаю. Но когда-то решал задачу сбора статистики по проекту — считал количество файлов по типам, количество строк в файлах и там ещё чё-то. Вот тут лежит, если не лень разбираться.
    Ответ написан
    1 комментарий
  • Как не убить свой новый жд?

    customtema
    @customtema
    arint.ru
    Система была разбита на 800 Гб под винду, и 200 Гб под линукс.


    Надо наоборот.

    Как влияет частая переустановка ОС, изменение тип файловой системы (например с NTFS на EXT4), использование 2 ОС с разными типами файловых систем и тд.


    Вообще никак.

    P.S. ещё, что я заметил, то при загрузке операционной системы, жесткий диск непривычно активно и громко работает при загрузке линукс.


    Это потому, что на соседнем разделе винда.
    Ответ написан
    6 комментариев
  • Как не убить свой новый жд?

    Jump
    @Jump
    Системный администратор со стажем.
    Как не убить свой новый жд?

    • Не допускать ударов и вибрации.
    • Обеспечить нормальное питание.
    • Не допускать перегрева.
    • Использовать диск в соответствии с предназначением.


    Все остальное - неважно.
    Ответ написан
    Комментировать
  • Как не убить свой новый жд?

    l0ser140
    @l0ser140
    Так на диске появились бэд блоки или что? Каким нибудь mhdd/victoria диск не чекали? А почему решили, что проблемы с диском?

    А советы самые стандартные: не ронять, не трясти во время работы, соблюдать температурный режим.
    Манипуляции с разделами или файлами никак не должны сказываться на жестком диске.
    На износ жесткого диска в основном влияет количество стартов и парковок.
    Ответ написан
    Комментировать
  • Как не убить свой новый жд?

    @Wexter
    4 года нынче для дисков неприлично много, радуйтесь что не поменяли уже 2 раза его за это время
    Ответ написан
    Комментировать
  • Почему отключается usb-порт, после подключения кабеля?

    eapeap
    @eapeap
    Сисадмин, Беларусь
    С нормальным проводом всё нормально?
    чем чревато подключение подобного кабеля?

    Может сдохнуть USB порт, а может - и весь ноут.
    Ответ написан
    4 комментария
  • Как в twig сделать bb-коды?

    sayber
    @sayber Куратор тега PHP
    Да, я программирую на PHP и еще асинхронно!
    1 комментарий
  • Минимальные настройки безопасности Linux на VPS?

    Tyranron
    @Tyranron
    Ряд моментов Вы уже сделали, но я все равно их опишу для полноты списка.

    1. Создать отдельного пользователя и хороший пароль на sudo. Не использовать больше root напрямую. Совсем.

    2. SSH. Отключаем метод аутентификации по паролю. Если Вам не нужны другие методы, то их тоже можно отключить, оставив только publickey. Отключаем возможность аутентификации root'ом. Включаем использование только 2й версии SSH протокола.

    3. Устанавливаем Fail2Ban и настраиваем чтобы после нескольких неуспешных попыток подключения по SSH банило по IP на длительное время. Кол-во попыток и время бана можно тюнить в меру своей паранойи. У меня, например, банит на час после 2х неуспешных попыток.

    4. Iptables. Действуем по принципу "запрещено все, что не разрешено". Запрещаем по умолчанию весь INPUT и FORWARD трафик снаружи. Открываем на INPUT'е 22 порт. В дальнейшем открываем порты/forwarding по мере необходимости. Если у нас предполагаются сервисы на соседних серверах нужные только для внутренней коммуникации (Memcached, Redis, и т.д.), то открываем для них порты только для определенных IP. Просто так торчать наружу для всех они не должны.

    5. Настраиваем автоматические обновления apt-пакетов. Уровень security. То есть так, чтобы обновления безопасности накатывались автоматически, но при этом не выполнялись обновления со сменой мажорной версии (дабы обезопасить себя от "само сломалось").

    6. Устанавливаем ntpd. Серверное время должно быть точным. Также временную зону сервера лучше всего установить в UTC.

    7. TLS (не SSL) используем везде где можем. Через Let's Encrypt получаем бесплатные валидные сертификаты. В конфигах веб-серверов, mail-серверов, и других приложений торчащих наружу (в том числе и OpenVPN), запрещаем/убираем использование слабых шифров. Все ключи/параметры генерируем не менее 2048 бит. Самоподписные сертификаты подписываем с помощью SHA-256 (не SHA-1). Diffie-Hellman параметры (dh.pem) под каждый сервис лучше сгенерить отдельно. Проверяем TLS сервисов через Nmap. Минимальный grade должен быть A, не должно быть warning'ов.

    8. Правильный менеджмент пользователей/групп. Приложения/сервисы не должны запускаться под root'ом (разве что они действительно этого требуют и иначе никак). Для каждого сервиса создается свой пользователь.

    9. Если предполагается upload файлов через PHP (либо другие скриптовые языки), в директории, куда эти файлы загружаются (и которая доступна снаружи), должно быть жестко отключено любое выполнение скриптов/бинарников, что на уровне ОС (x права), что на уровне веб-сервера.

    Это была база.
    Дальше, в меру своей паранойи можно за'harden'ить сервер ещё следующими моментами:
    - SELinux, chroot
    - доступ к SSH только с определенных IP (нужно иметь 3-4 VPN-сервера под рукой)

    UPD И да, все это помнить/настраивать руками каждый раз может быть запарно. Используйте Ansible и автоматизируйте процесс (там родные и YAML, Jinja2 и Python).
    Ответ написан
    10 комментариев