Преди време Владо Герджиков имаше проблеми с доставчика на хостинг “dom.bg”. Понеже и аз съм също там (все още; засега май реших голяма част от проблемите и не ми е чак съвсем некомфортно, та може да остана до края на платения период…), реших да споделя един малък хак за хората с WordPress.
На dom.bg PHP работи не като модул на уеб-сървъра, а като скрипт през CGI. Причините няма да коментирам – те си знаят защо са решили така. Не зная колега, който ще сложи PHP през CGI на такъв голям сървър, но все едно – това е положението.
Та един от основните проблеми при работата с dom.bg е именно този. Повечето готови системи, писани на PHP, най-често изобщо не правят проверка дали се работи през CGI. Обяснявам си го с предположението, че почти никой не би се сетил, че има публичен хостинг, който да пуска PHP през CGI. Нещо по-“екзотично” като Ruby например може и да се пусне, но пък PHP… Макар да си има модул и за Ruby. :)
При инсталиране на WordPress на въпросния хостинг всичко минава правилно до момента, в който трябва да заредите сайта си. Тогава се връща грешка 500 (internal server error). Иначе администраторският интерфейс си работи, всички настройки и редактирания – също. Проблемът се появява при зареждане на основния сайт. Логовете на dom.bg не са видими от потребителя, можете да ги изискате с писмо до поддръжката, но в този случай не си правете труда. Ето решението…
Ако инсталирате WordPress на акаунт към dom.bg (или изобщо някъде, където PHP работи през CGI, отворете файла /wp-includes/functions.php и намерете мястото със следните два реда:
@header(“HTTP/1.1 $header $text”);
@header(“Status: $header $text”);
Във версията, която днес инсталирах (2.0.2 – последната към момента) тези редове са с номера 2170 и 2171. Но с търсене ще ги намерите – единствени във файла са.
Това, което ще реши проблема ви, е закоментирането на първия от тези редове. Сложете коментар (“//”) пред реда, който изпраща HTTP/1.1 заглавка. Първият ред е за PHP като модул, а вторият – за PHP, изпълняван през CGI.
Не зная защо в самия код на WordPress не са добавили точно на това място една кратка проверка как се изпълнява PHP и след това просто да се изпраща съответния ред. Може би това е възможно решение на бъг в WordPress, но рядко бъркам и надничам в кода на WP, за да кажа със сигурност дали е бъг и дали трябва да се добави провеерка. Или може да минем само с тоози малък хак за такива “странни” хостинги като родния dom.bg. Ако някой има представа и му се занимава да чете по-подробно кода на WP, нека каже. Ако проверката е удачна, може да пратим на разработчиците поправката. Става дума за ред-два “if-then-else” проверка ;)
Приятно блогване ;)