Есть такая команда: cat hosts.txt >> /etc/hosts (мы хотим добавить список хостов из файла в файл hosts). Допустим нам нужны права на то, чтобы прочитать первый файл и права на запись во второй. Как быть?
Решение, следующее:
sudo sh -c 'cat hosts.txt >> /etc/hosts'
Месяц: Октябрь 2012
Где стоит побывать. Часть 1.
StandardПрочел в книге «100 мест в которых стоит побывать прежде, чем умереть», вычеркнул неинтересные мне места и места в которых уже побывал — осталось 92:
- Мачу — Пикчу
- Пирамиды
- Водопад Игуасу
- Тадж — Махал
- Гранд — Каньон
- Вел. китайская стена
- Петра
- Нац. парк Серенгети
- Водопад Виктория
- Большой Барьерный Риф
Ozon Api краткая документация
StandardКак то пришлось работать с OZON Api, выкладываю их доступные методы. Рассказывать особо нечего — из названия функций и переменных итак понятно, как все работает. <POST> — означает послать POST запрос на адрес их api сервера.
- ItemGet(article)
- ItemListGet(filterName, filterArticle, filterMinQty, filterMaxQty, filterMinPrice, filterMaxPrice, filterMinPictureCount, filterMaxPictureCount, filterStatus, filterItemTypeID, itemsOnPage, pageNumber, sortTag)
- <POST> ItemAdd(article, descript, itemAvailabilityId, itemTypeId, name, price, qty)
- <POST> ItemStatusModify(article, statusId)
- OrderGet(orderNumber)
- OrderListGet(orderNumber, stateId, minOrderSum, maxOrderSum, deliveryVariantId, paymentTypeId, minOrderDate, maxOrderDate, clientId, pageNumber, ordersOnPage, sortTag)
- RevokeTypesGet()
- <POST> ItemModify(article, descript, itemAvailabilityId, itemTypeId, name, price, qty)
- <POST> ItemPicturePackUrlAdd(url)
- <POST> ItemPictureRemove(pictureId)
- <POST> ItemPictureUrlAdd(article, url)
- <POST> OrderStatusModify(orderNumber, statusId)
Статусы:
- 1733000
- 1735000
Полезные jquery функции
StandardОбычные:
- $(‘selector’).load() //загрузит данные в селектор, можно даже так: $(‘selector’).load(‘somepage.html#someAnchor’) закачивает страницу ищет по анкору кусок документа и вставляет его в селектор
Для работы с ajax:
- $.post(url, data, callback) //data строка или {}
- $.get()
- encodeURIComponent() // не jQuery функция, позволяет кодировать символы в урле
- $(‘#someForm’).serialize() // очень классная функция, берет все элементы в форме и формирует из них json объект
- .error(callback) // если в аяксе ошибка — callback ее обработает
- .getJSON() // сокращенная запись $.get(‘url’, data, callback, ‘json’)
Перемещение по DOM`у:
- .find(‘selector’) // ищет по заданному селектору, иногда быстрее чем сама ф-ция $
- .children() //возвращает детей
- .parent() // возвращает верхнего родителя
- .closest(‘selector’) // идет по дереву вверх, при нахождении селектора, останавливается и возвращает его
- siblings() // соседи
- next() // сосед справа
- prev() // сосед слева
Работа с html:
- end() // метод возвращает ориг. объект селектора, к примеру $(‘selector1′).doStuff().find(‘selector2′).end() в конце он вернет объект на к-ый ссылается селектор selector1, а не selector2
- wrap(‘<sometag></sometag>’) // обрамляет элемент в заданный html
- wrapInner()
- unwrap()
- empty()
$().delegate(‘selector’, ‘event’, f(){}) ~ .live()
Лично я придерживаюсь такого стиля: когда надо сохранить в переменную jQuery объект, я именуя его предваряя долларом, к примеру $someVar = $(‘#someId’). Кстати сохранять jQuery объекты в переменных очень полезно, тк данные будут сохранены в памяти и еще раз вам вызывать тот же самый селектор не понадобится.
Советы по селекторам:
- исп ID где можно
- исп ID как первое в род. селекторе
- $(‘#main’).find(a) бывает быстрее иногда чем $(#main a)
- Не исп много селекторов, лучше сделать так: find(‘selector’).find(‘selector’).find(‘selector’)
Работа с регулярками в JS:
- /regexp/
- str.search(//)
- .replace(//, replace)
- match()
Вывести список модулей в apache
Standard
apachectl -t -D DUMP_MODULES #посмотреть список загруженных модулей
apachectl -M #аналог того что выше
apachectl -l #список модулей с к-ыми скомпилирован
ls /usr/lib/apache2/modules/ модули здесь лежат
Стоит ли делать flush в PHP
StandardПо мотивам этой статьи. В ней советуют использовать flush ф-цию из PHP чтобы отдать клиенту данные из output буффера, таким образом что клиент увидит страницу раньше, чем если бы мы flush не воспользовались. Но к этой технике есть пара замечаний:
- Время PHP скрипта между началом и концом выполнения мало по сравнению со временем передачи данных, это уменьшит время приблизительно на 0.5 секунд, в зависимости от кода. Убедитесь что это вам необходимо.
- Это техника не работает с gzip output buffering
- Если вы флашите очень часто вы будете отсылать почти пустые пакеты при флаше, что возможно вызовет увеличение времени загрузки (на медленных соединениях)
- После того как буфер сброшен, вы больше не сможете отослать доп. заголовки
- Ответ сервера будет в виде chunked encoding, что означает клиент не будет знать размер данных (из-за этого не отобразится «x% готово» при скачивании файла)
С другой стороны и у этой техники есть плюсы, если ваш скрипт долго работает — flush поможет клиенту увидеть данные как можно раньше.
Как ускорить IPBoard форум
StandardНедавно чинил форум на движке IPBoard (версия не самая новая была), было необходимо ускорить сайт — он открывался секунд за 40, после моих стараний он открывается за 1 сек. Итак, как ускорить форум:
- Установить NGINX + всю статику отдавать от него. (У заказчика стояли хитрые правила в apache пришлось не статический трафик отправлять через него, как reverse proxy).
- Обновите PHP, MySQL если у вас не стоит свежая стабильная версия.
- Установите правильные настройки в MySQL (про это сделаю отдельную статью).
- Установите настройку «Обновление просмотров темы немедленно» (Update Topic Views Immediately) на нет (в админке -> настройки -> CPU)
- Можно сделать и такое с таблицой сессий (мне не помогло): alter table ibf_sessions Engine = ‘heap’;
- Установите memcached, в файле conf_global.php установите следующие настройки:
$INFO['use_memcache'] = 1;
$INFO['memcache_server_1'] = "nameofserver";
$INFO['memcache_port_1'] = "11211";
На самом деле все вышеописанное придало не очень ощутимый прирост (порядка 1-5 сек.), пришлось использовать XHProf расширение для PHP чтобы профилировать код и выяснить, в чем же собственно проблема! Про XHProf сделаю отдельную статью.
Динамические свойства объекта в PHP и StdClass
StandardPHP позволяет создавать необъявленные переменные на ходу:
$someClass->nonExistenVar = 'someValue';
в итоге создастся переменная класса nonExistenVar. Если логика класса не такая простая — можно использовать магические методы __get и __set, но они как правило медленнее раз в 30 обычного присваивания.
Разница между empty(), isset() и is_null() в PHP
StandardЛично я путаюсь в ответе на вопрос «В чем между ними разница». Поэтому приклепляю табличку на память.
Примечания:
- $undefined — необъявленная переменная
- NULL — переменная объявленна, но ей не присвоено никакого значения (что она означает в пхп)
- 0 — ноль
- false — одноименная булевая переменная
- 353 — любое цифровое значение (int, float)
- «» — пустая строка
- В столбце «Функция» == и === означают, что значение сравнивается с false те для столбца 353 выполняется следующая операция: false == 353
Функция | $undefined | NULL | 0 | false | 353 | «» |
---|---|---|---|---|---|---|
isset() | false | false | true | true | true | true |
empty() | true | true | true | true | false | true |
is_null() | true | true | false | false | false | false |
== | true | true | true | true | false | true |
=== | false | false | false | true | false | false |
Лично мое мнение: в javascript с этим все логичней как-то, есть специальный тип undefined, есть тип null к-ые друг от друга все же отличаются. В php другая история, тут надо использовать isset чтобы проверить объявленна ли эта переменная в коде выше.
413 Request Entity Too Large ошибка в Nginx
Standard413 ошибка сообщает что пересылаемая инфа в post больше допустимой, решаем просто,
в файле /etc/nginx/nginx.conf (под debian):
http {
...
client_max_body_size 15m; #ставим любой размер, к-ый нужен
}