Столкнулся с проблемой: когда пытался обновить wordpress до последней версии через админку, кликая по ссылке "обновить автоматчески", получал ошибку примерно такого содержания: "за 30 секунд скачано только 1700000 байт из 2600000, неудача". Оказалось, что шейпер на входящий трафик моего хостера не позволял за 30 секунд (а именно такой timeout был установлнен по умолчанию) стянуть весь диструбитив wordpress-а. Чтобы поменять этот тайм-аут, нужно в файле wp-admin/includes/file.php найти строку
Таким образом, мы вдвое увеличили время ожидания отработки запроса.
Дополнение от 2010-01-24. Начиная с версии 2.9.1, таймаут по умолчанию уже установлен в 300 сек (или 5 минут). Так что теперь эта проблема будет встречаться намного реже.
Отложенная публикация в wordpress 2.7. Чтобы заметки, запланированные на публикацию в будущем таки появлялись в блоге, нужно в cron добавить вызов скрипта wp-cron.php c параметром check. Значение параметра легко определить, временно добавив перед строкой
if($_GET['check']!= wp_hash('187425'));
что-то типа
echo(wp_hash('187425'));
Тогда, набрав в адресной строке броузера http://<вашблог>/wp-cron.php, можно увидеть значение хеша (46cbe1674da1d2888104482d6ed4f87f). Следовательно, из крона обращаться к http://<вашблог>/wp-cron.php?check=46cbe1674da1d2888104482d6ed4f87f. Естественно, для предотвращения DoS-атак лучше заменить стандартную последовательность 187425 на что-то другое. В WordPress 2.8.2 в файле wp-cron.php уже нет такой проверки, поэтому достаточно его просто вызывать без параметров, например добавив в системный cron что-то такое:
Чтобы удалить из базы данных ревизии постов (промежуточные их версии, которые образовываются в результате внесения изменений и дополнения постов), нужно выполнить такой простой SQL-запрос:
DELETEFROM wp_posts WHERE post_type='revision';
Есть еще и более изящный и правильный метод удаления черновых заметок, который описан ниже в комментариях. Другие возможные значения поля 'post_type' – attachment, page, post (для версии 2.8.4). Чтобы вообще запретить создание ревизий, нужно в файл wp-config.php добавить строку
define('WP_POST_REVISIONS',false);
Если нужно, чтобы вверху над каждым постом отображался один и тот же блок HTML-кода, можно сделать так. Находим файл /wp-content/themes/<имя_темы>/content/content-default.php, и вставляем в него перед вот этой 25-ой строкой
content-default.php
нужный нам html-блок. Этот блок удобно заключить в конструкцию <div id="myblock">...</div> и в файле со стилями CSS определить атрибуты для нашего блока. CSS-файл находится в директории /wp-content/themes/<имя_темы>/css/ и имеет имя, совпадающее с именем темы и расширение .css. Пример опеределения атрибутов:
div#myblock{padding-top:10px;text-align:center}
Если хотим, чтобы блоки с программным кодом красиво выделялись, как в этом посте – качаем и устанавливаем plugin Highlight Source Pro. Поддерживает более 90 языков, включая HTML, PHP, Perl, bash, CSS. Пример использования можно посмотреть на скриншоте.
Если при установке плагинов WordPress ничего не качает и вместо этого спрашивает "информацию для соединения", как на этом скриншоте, то это означает, что он не может получить доступ на запись в каталог /wp-content/plugins и надо проверить права доступа. Запрашиваемая информация для соединения – это атрибуты доступа к FTP-серверу, на котором работает WordPress. Это таким образом WordPress пытается пойти по обходному пути когда видит, что у него нет прямого доступа к файловой системе.
Если нужно отключить авто-замену двойного дефиса на красивое тире (а это бывает нужно, например, при публикации документации по linux-командам, ключи (параметры) которых часто именно и начинаются с '--', т.е. двух дефисов подряд), то нужно немного модифицировать код функции wptexturize. Для этого этот код
Похоже, что и в этой же функции происходит замена трех точек на unicode-символ троеточия и еще какие-то манипуляции с кавычками. Update от 2014-12-11: Все вышесказанное, начиная с версии 4.0, уже не актуально, так как formatting.php переписали почти с нуля и ранее упомянутого кода там уже нет. Более идеологически правильный способ избавиться от авто-замены (если честно, меня она просто ужасно бесит – я хочу видеть текст именно в том виде, в котором я его написал) – это добавить в начало файла /wp-content/themes/<ИМЯ_ВАШЕЙ_ТЕМЫ>/functions.php вот такой код:
Прелесть такого подхода в том, что эти правки не потеряются при очередном обновлении.
Если WordPress живет на сервере с Apache, то для запрета выполнения PHP- и CGI-скриптов в директории, куда wordpress сохраняет пользовательские файлы (/wp-content/uploads), достаточно положить туда файл .htaccess следующего содержания:
/wp-content/uploads/.htaccess
<FilesMatch"\.(phtml|php3?|pl|cgi)$">
Deny from all
</FilesMatch>
Это весьма рекомендуется сделать, поскольку снижает риск успешного взлома в случае, если злоумышленнику каким-то образом удастся загрузить php-shell или другие инструменты для своих темных делишек – запустить он их так просто не сможет. Также очень рекомендуется по возможности запрещать в firewall-е установку исходящих соединений с сервера хостинга на удаленные ресурсы.
Для изменения пароля пользователя (например, если он был успешно забыт) достаточно одного простого SQL-запроса. Например, чтобы установить для пользователя admin пароль Gyhusdf3f, делаем так:
UPDATE wp_users SET user_pass=MD5('Gyhusdf3f')WHERE user_login='admin';
По-умолчанию в исходном коде страниц сайта присутствует META-тег generator, в котором указывается версия WordPress. Выглядит он примерно так:
Ниже приведены некоторые полезные для системных администраторов команды, которые можно использовать в .bat-файлах и различных скриптах для автоматизации.
Посмотреть ip-адреса сетевых интерфейсов:
netsh interface ip show address
Поменять ip-адрес интерфейса с именем Internal на 192.168.1.42, установить маску подсети 255.255.254.0 (/23) и установить шлюз по умолчанию 192.168.1.1 с метрикой 1:
Установить для интерфейса с именем Internal DNS-сервера 192.168.1.10 и 192.168.1.11:
netsh interface ipset dns name="Internal" static 192.168.1.10
netsh interface ip add dns "Internal" 192.168.1.11
Получить mac-адреса сетевых интерфейсов:
getmac
Командый файл для закачки множества файлов с похожими именами (в результате в текущую директорию будут скачиваться файлы по ссылкам https://avz.org.ua/wp/films/Univer_1.avi, https://avz.org.ua/wp/films/Univer_2.avi, ..., https://avz.org.ua/wp/films/Univer_20.avi):
@echo off
setURL=http://avz.org.ua/wp/films/Univer
FOR /L %%I IN (1,1,20) DO wget%URL%_%%I.avi
Обратите внимание, что переменная цикла должна состоять из одной буквы, иначе работать не будет, выдавая ошибку типа "Непредвиденное появление: %Ind" (у меня полчаса ушло, чтобы понять в чем косяк, когда я пытался использовать Ind в качестве итератора :/ Зато help по команде FOR перечитал вдоль и поперек :) пока пытался постичь сей феномен). После этого с особой теплотой вспоминал bash, который как скриптовый язык намного удобнее и мощнее этого убогого поделия мелкомягких. Утилитку wget под windows можно скачать, например, здесь.
Узнать размер файла: создаем файл, к примеру, с именем flen.bat следующего содержания
setFLEN=%~z1
echo%FLEN%
Запускаем файл flen.bat, передавая ему в качестве аргумента имя файла, размер которого хотим получить. Подробнее о конструкциях, подобных %~z1 можно почитать в справке по команде call, набрав в командной строке call /?
Переименование файлов в текущем каталоге с заданным расширением так, чтобы имена образовали последовательность чисел, начиная с заданного:
Конструкция %~x1 выделяет из переменной %1 (1-ый параметр командного файла) фрагмент имени файла, соответствующий его расширению (см. call /?). Метка :EOF означает конец файла.
Экспортирование определённого раздела реестра в файл с именем putty.reg:
Иногда бывает, что в Windows XP служба брандмауэра (Internet Connection Firewall) куда-то девается из списка служб и/или её невозможно запустить (вылазит сообщение об ошибке "Вследствие неопределенной ошибки не удается отобразить параметры брандмауэра Windows"). Восстановить службу "Брандмауэра Windows / Общий доступ к Интернету (ICS)" можно следующей командой:
Отключение административных общих ресурсов (C$, D$ и т.д.). При запущенной службе "Сервер" есть возможность при известном пароле пользователя с правами администратора получить по сети доступ к любому файлу на жестком диске. Конечно, такой доступ еще должен быть разрешен в брандмауэере. А поскольку многие не затрудняют себя установкой паролей более сложных, чем "123", и часто отключают встроенный в windows брандмауэер, такую возможность часто желательно отключать. Для отключения шаринга административных общих ресурсов следует запустить редактор реестра (regedit) и создать в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters параметр AutoShareWks типа DWORD и установить его значение в 0. Соответствующий .reg-файл можно скачать по ссылке выше.
Ну и напоследок список системных переменных Windows
%ALLUSERSPROFILE% - размещение профиля «All Users»
%APPDATA% - используемое по умолчанию размещение данных приложений
%CD% - путь к текущей папке
%COMPUTERNAME% - имя компьютера
%ERRORLEVEL% - код ошибки последней использовавшейся команды. Значение, не равное нуля, обычно указывает на наличие ошибки
%HOMEDRIVE% - имя диска локальной рабочей станции, связанного с основным каталогом пользователя. Задается на основании расположения основного каталога
%LOGONSEVER% - имя контроллера домена, который проверял подлинность текущей сессии
%NUMBER_OF_PROCESSORS% - количество процессоров, установленных на компьютере
%OS% - имя операционной системы
%PROCESSOR_ARCHITECTURE% - архитектура процессора. Пока доводилось встречать значения: x86, IA64
%PROCESSOR_IDENTFIER% - описание процессора
%PROCESSOR_LEVEL% - номер модели процессора, установленного на компьютере
%PROCESSOR_REVISION% - номер модификации процессора
%RANDOM% - произвольное десятичное число от 0 до 32767 (работает в cmd.exe)
%SYSTEMDRIVE% - имя диска, содержащего корневой каталог Windows XP (т.е. системный каталог)
%SYSTEMROOT% - размещение системного каталога Windows XP
%TEMP% и %TMP% - временные папки, по умолчанию используемые приложениями, которые доступны пользователям, выполнившим вход в систему
%TIME% - Возвращает текущее время. Использует тот же формат, что и команда time /t, создается командой Cmd.exe
%USERDOMAIN% - имя домена, содержащего список учетных записей пользователей
%USERNAME% - имя пользователя, выполнившего вход в систему
%USERPROFILE% - размещение профиля для текущего пользователя
%WINDIR% - размещение каталога операционной системы
VPN расшифровывается как Virtual Private Network, а PPTP – это Point-to-Point Tunelling Protocol, используется чаще всего для организации защищенного подключения удаленных пользователей во внутреннюю сеть компании через публичные сети, такие как Интернет, а также некоторыми Интернет-провайдерами с ограниченным адресным пространством для экономии "белых" IP-адресов при предоставлении услуги доступа в Интернет. Далее описиан пошаговый алгоритм настройки VPN-сервера:
Качаем и устанавливаем пакет pptpd, подходящий для нашей системы. Для моей CentOS 5.5 i386 это выглядело так:
Опции ms-dns – это те DNS-сервера, которые выдаются клиенту. Нужно изменить на те, которые реально используются в Вашей сети. Если клиент в состоянии использовать DNS-сервера (по умолчанию клиент получит в качестве шлюза свой IP-адрес, который прописан в файле chap-secrets и DNS-сервера по этой причине могут стать недоступны), которые он использовал до установки vpn-подключения, эти опции можно убрать.
Редактируем /etc/pptpd.conf, нужно чтобы в нем были следующие строки:
Параметры localip и remoteip изменяем в соответствии с IP-адресацией в Вашей сети.
Запускаем сервис:
/etc/init.d/pptpd start
Включаем автозагрузку сервиса при старте системы:
/sbin/chkconfig pptpd on
Пробуем подключаться. Если в качестве клиента Windows XP и имеются проблемы с подключением, то в настройках подключения на вкладке "Безопасность" нужно снять галочку "Требуется шифрование данных".
Возможные проблемы:
1. Если какая-то машинка за NAT-ом испытывает трудности с подключением к внешнему VPN-серверу и винда показывает ошибку №619, то стоит попробовать включить модуль ядра ip_nat_pptp на linux-роутере, который исполняет NAT:
modprobe ip_nat_pptp
Если в логе (/var/log/messages) сервера с pptpd имеется нечто такое
Feb 17 08:09:29 zeon pppd[28671]: Plugin /usr/lib64/pptpd/pptpd-logwtmp.so is for pppd version 2.4.3, this is 2.4.4
то наиболее простым решением является убирание опции logwtmp из файла /etc/pptpd.conf. Это приведёт к тому, что сеансы связи клиентов не будут отбражаться командой last (которая как раз и работает с /var/log/wtmp). Ну а правильным решением будет найти rpm-ку соответсвующую вашей системе или пересобрать pptpd руками из исходников.
Если в логе (/var/log/messages) сервера с pptpd наблюдается
Feb 1711:18:12 zeon kernel: pptpctrl[30130]: segfault at 00000000 rip 005a34b0 rsp ffe60810 error 4
а клиенты на windows-машинках при подключении получают ошибку 800, то, скорей всего, исчерпался лимит одновременных подключений, который задаётся опцией remoteip в файле /etc/pptpd.conf. Такой segfault у меня был когда в /etc/pptpd.conf я сдуру втулил строчку "remoteip 192.168.0.2-192.168.0.254" (пускало только первого юзера, а все последующие получали ошибку 800 и segfault в логе сервера). После того, как заменил на "remoteip 192.168.0.2-254" всё заработало как надо.
Если очень хочется сохранить себе на память понравившийся видео-ролик, который встретился где-то на бескрайних просторах Интернета (например, на youtube.com) и просмотренный из броузера Opera, сделать это можно так:
Перейти в каталог, в котором содержится дисковый кеш Оперы, в Windows обычно это %APPDATA%\Opera\Opera\profile\cache4, или, если вместо переменной окружения APPPATH подставить ее значение, – C:\Documents and Settings\user\Application Data\Opera\Opera\profile\cache4. Достоверно узнать этот путь можно у самой оперы, набрав в строке адреса opera:config#UserPrefs и посмотрев значение параметра "Cache Directory4";
Найти среди файлов с временем модификации, не сильно отличающимся от текущего, те, размер которых максимален – с очень большой вероятностью это и будет тот видео-файл, который Вы только что смотрели в окне броузера (имена файлов в кеше формируются случайным образом, скорей всего, имя у него будет похожее на что-то типа "opr03XWL").
В 10-ой опере структура кеша изменена, теперь файлы храняться не в одной директории, а в нескольких десятках с именами вида "g_00xx", где вместо xx могут быть любые шестнадцатиричные цифры. Поиск файла в этом дереве уже не настолько прост, как было раньше, но всё равно принципиальных проблем нет. Я это делаю с помощью следующей команды:
find-type f !-name dcache4.url !-iregex".*sesn.*"-mmin-1-size +1024k
Это стандартная для unix-систем утилита find. Find для windows можно взять, например, отсюда. Данная команда ищет файлы, начиная с текущей директории, размером более 1МБ, содержимое которых изменялось не более 1 минуты назад. Из результатов исключаются файлы в директории sesn (насколько я понял, там опера кеширует файлы для сайтов с авторизацией) и файл с именем dcache4.url. Обратите внимание, что в Windows есть своя утилита find.exe, чем-то напоминающая grep. Так что если просто набрать в командной строке команду find, то запуститься именно родная виндовая. Чтобы запустить юниксовый find, нужно либо указать в нему полный путь, либо переименовать в что-то уникальное и помесить в одну из директорий, перечисленных в переменной окружения $PATH.
Скопировать найденный видео-файл куда-то на постоянное место жительства, переименовав соответствующим образом и добавив ему расширение ".flv";
Открыть файл любимым плеером, я для этого использую VLC.