вторник, 30 октября 2012 г.

Моё расписание

Все популярные блоггеры пишут у себя в блогах: "у меня впереди очень плотный график! Завтра - лечу в Армению, послезавтра - в Исландию, послепослезавтра - в ЮАР". И прикладывают скриншот какой-то, очевидно, эппловской программки, где это всё нарисовано ну типа как в Google Calendar.

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

И о работе. Сегодня я взял свою операционную систему, исправил "oneric" на "quantum" в файле /etc/apt/sources.list, скрестил пальцы на удачу, и:
# aptitude update
# aptitude upgrade php5
Как бы не так. Пришлось долго плясать с бубном; а ещё PHP захотело обновить MySQL до версии 5.5, и он обновиться не смог, потому что ему мешали какие-то остатки от MySQL 5.1, которые пришлось выгребать чуть ли не руками. Но в итоге я получил у себя PHP 5.4.

Дальше я сочинил вот такую конструкцию:
find * | grep '.php$' | xargs -n 1 php -l
Что она делает:
1) "find *" находит все файлы в текущей папке и вложенных подпапках, и через вертикальную палку передаёт свой stdout дальше. Правильно это называется "конвейер".
2) "grep '.php$'" берёт входной поток и сравнивает всё, что в него валится, со строкой ".php", причём надо обязательно, чтоб строка на ".php" заканчивалась. Знак доллара там как раз означает конец строки; если б мне надо было, чтоб греп искал знак доллара, я бы написал "\$". И снова по конвейеру это валится дальше.
3) самая важная часть конструкции состоит из двух половин. "xargs -n 1" нарезает входящий поток порциями по одной строке и скармливает в качестве аргумента следующей команде. "php -l" в качестве аргумента принимает строки из xargs (то есть запускается каждый раз отдельно для каждой строки) и проверяет синтаксис.

Таким образом, одной командой можно проверить синтаксис всех php-скриптов в данной папке, даже не открывая браузер. Единственный минус, который я пока не придумал, как обойти, так это то, что вся конструкция прекращает работу, когда php в первый раз спотыкается. То есть можно получить не весь список найденных ошибок, а только первую попавшуюся. Но, тем не менее, консоль - сила, винда - могила! Кстати говоря, результат исследования неутешителен: не все части 1C-Bitrix поддерживают PHP 5.4. Ну то есть уже установленный битрикс завёлся у меня нормально, но можно ли будет его установить с нуля и будет ли он вообще нормально работать - этого никто гарантировать не может.

4 комментария:

  1. По крайней мере твою командную конструкцию можно было упростить так:

    find . -type f -name "*.php" -exec php -l "{}" \;
    или
    for i in *.php; do php -l $i; done

    Я бы делал вторым способом.

    ОтветитьУдалить
    Ответы
    1. Можешь объяснить значение вот этого:
      "{}" \;
      ?

      Удалить
    2. -exec command

      True if the executed command returns a zero value as exit status. The end of command must be punctuated by an escaped semicolon (;). A command argument {} is replaced by the current pathname. If the last argument to -exec is {} and you specify + rather than the semicolon (;), the command is invoked fewer times, with {} replaced by groups of pathnames. If any invocation of the command returns a non-zero value as exit status, find returns a non-zero exit status.

      Удалить

Ублюдочный Гугл поломал форму комментариев. Извините.