пятница, 14 ноября 2008 г.

Что лучше Ruby или PHP? Или PHP Vs Ruby on Rails

Именно этот вопрос я недавно увидел на каком-то форуме :). Хочу немного помочь в нем разобраться. Впринцыпе хороший сайт, грамотный программист сделает и там и там...
Но..В ПХП есть куча фреймворков, написанных разными людьми с разным уровнем, что выбирать или может написать свой - дело только программиста. В Руби есть замечательный фреймворк, в народе именуемый - Рельсы (Rails), который настолько облегчает разработку, настолько мощный, что скорость разработки увеличивается колосально. Его использует огромное количество програмеров, он отлично оттестирован.
Главные изюминки Ruby on Rails, это:
  1. Сам язык руби, ну уж очень удобный
  2. ActiveRecord - прослойка для работы с любыми БД
  3. MVC архитектура и жесткая привязка кода по папках - искать нужный код просто прелесть
  4. Сильно развитое тестирование (юнит тесты, функциональные, интеграциооные тесты, мок-обьекты, RSpec,...)
Напоследок скажу, человек хоть немного поработав на Ruby on Rails никогда в жизни не задаст вопрос - "А чем это же лучше чем ПХП".

Так что пробуйте товарищи программисты, пробуйте и вы ОЧЕНЬ много для себе откроете нового.

Как итог, сам задам вам вопрос: "Что удобнее, ехать из Киева в Москву велосипедом, или поездом??? Причем неважно на каком уровне вы владеете велосипедом" :)


вторник, 11 ноября 2008 г.

Работающий пример проксирующего скрипта

Реальный работающий прокси-скрипт, для примера из прошлой статьи

include $_SERVER["DOCUMENT_ROOT"]."/common/define.php";
$file=($_GET[file]);
$file = ROOT."/shared".$file;
if(isset($file)){
  $fl = fopen("log_proxy_new.txt","a");
  fwrite($fl,$file."\n");
  $type = substr($file,strlen($file)-3,3);
  if($type=="css"){
      header('Content-type: text/css');
   }else if($type==".js"){
      header('Content-type: application/javascript');
   }
   readfile($file);
}
fclose($fl);
exit;
?>

пятница, 7 ноября 2008 г.

Вынести FCKEditor выше DOCUMENT_ROOT

Для того чтобы вынести FCKEditor выше рута, пришлось немного попотеть, потому хочу облегчить задачу тем кто захочет сделать подобное. Идея вынести редактор возникла по простой причине, допустим, нас есть CMS, на которой настроена туча сайтов. Возникла мысль все общее для всех сайтов вынести наружу, и оформить в отдельном хранилище в форме ядра.

Польза вынесения редактора: вышла новая версия редактора, а старая нас не совсем устраивает (например вылезает баг), а у нас уже есть десяток сайтов на одной основе. В таком случае придется настраивать редактор 10 раз в каждом сайте - согласитесь, трудоемкая задача.

При настройке редактора(FCKEditor), нужно обязательно задать $this->BasePath в файле fckeditor_php5.php. Это путь относоительно которого должен работать редактор, он ОБЯЗАТЕЛЬНО должен быть относительно DOCUMENT_ROOT.

Как же обойти проблему??Самое оптимальное решение было найдено, привожу его вам:

В корне проекта создадим условие фильтра через modrewrite в.httaccess + проксирующий скрипт, который будет обрабатывать все пути доступа к FCKEditor и перенаправлять их куда надо. Причем конфигурационный путь будет вида: $this->BasePath = "http://".$_SERVER[SERVER_NAME].'/tools/fckeditor/' ;
Тоесть, мы не нарушаем идеологию настройки путей редактора.

Пример (работающий) проксирующего скрипта:

--------proxy.php:

";
if(isset($file)){
$file = ROOT."/tools/fckeditor/".$file;
$type = substr($file,strlen($file)-3,3);

if( $type=="php"){
include $file;
}else{
...

}

}

?>

Для того чтобы прокси-скрипт работал, необходимо чтобы все url которые идут к редактору, приходили на прокси посредством Get метода. Для этого в корне сайта положим в файлик httacces следующию дерективу для ModRewrite, который будет вырезать путь после tools/fckeditor/ и передавать в прокси-скрипт.

-----.httacces:

RewriteRule ^tools/fckeditor/(.*)$ /proxy.php?file=$1 [L]


В самом редакторе достаточно поставить "правильный" путь к нему, относительно рута.

---------fckeditor_php5.php

public function CreateFCKeditor($instanceName, $width, $height)
{
$this->InstanceName = $instanceName ;
$this->BasePath = "http://".$_SERVER[SERVER_NAME].'/tools/fckeditor/' ; <-- тут $this->Width = $width ;
$this->Height = $height ;
return $this->CreateHtml() ;
}

Особенности работы $_SERVER[HTTP_REFERER] в IE7

Столкнулся недавно с проблемкой, которая заняла пару часов мое разработки, так как отлавливалась долго. Если вы имеете сценарии на php где используете глобальную переменную среды $_SERVER[HTTP_REFERER] , то вы поимеете проблемы.

Проверено лично: данная переменная отрабатывает корректно в Мозиле, Опере и возвращает неадекватное значение в ИЕ7. Избегайте ее использование так как часто результатом будет пустая строка.

Для людей не стыкавшихся с проблемой - $_SERVER[HTTP_REFERER] - возвращает адрес страницы с которой мы пришли