Как написать свой фреймворк на php. Урок 2
- Информация о материале
- Категория: PHP
- Просмотров: 12930
В прошлой статье мы разобрали структуру фреймворка, но не его реализацию. Для того чтобы фреймворк начал функционаровать, нам потребуется его доработать. Для начала подключим файл конфигурацию. Мы обозначили файл, как config.php, но никак его не использовали.
По опыту разработки сразу оговорюсь, удобно использовать два файла конфигурации: первый для общих настроек - название сайта, адрес домена, время жизни куков, и второй для настроек подключения к БД. Это в первую очередь качается разработки на фреймворке. Так как для такой системы важно быстро развернуть ее на локальном компьютере и зачем перенести на сервер. При таком переносе, один из конфигов будет общим, а второй будет заполнен лишь единожды для каждого сервера. Поэтому определим два файла config.php и config.db.php
Структура этих файлов должна быть как можно проще. Идеальный вариант - ini файлы. Но для них нужно писать отдельные парсеры и они доступны из вне. Поэтому не будем изобретать велосипед, а сделаем простой php ассоциативный массив с парами ключ-значение.
Yii сниппеты
- Информация о материале
- Категория: Yii
- Просмотров: 10097
Статьи
Отличная статья по настройке таблицы
Action по умолчанию в Yii контроллере
В самом коде контроллера добавляем поле
public $defaultAction = 'test';
Язык сообщений об ошибках в Yii
В файле config/main.php добавляем в массив
'language' => 'ru',
Почему gii возвращает 403
По умолчанию с gii обычно работают только на локальной машине. Когда вы разкомментировали эти строки
'gii'=>array( 'class'=>'system.gii.GiiModule', 'password'=>'12345', // If removed, Gii defaults to localhost only. Edit carefully to taste. 'ipFilters' => array('127.0.0.1', '92.50.156.138'), // EDIT TO TASTE ),
надо добавить в массив
ipFilters
свой ip, узнать который можно к примеру тут
PHP Сниппеты
- Информация о материале
- Категория: PHP
- Просмотров: 10302
Получить реальный IP пользователя
function get_ip() { //Just get the headers if we can or else use the SERVER global if ( function_exists( 'apache_request_headers' ) ) { $headers = apache_request_headers(); } else { $headers = $_SERVER; } //Get the forwarded IP if it exists if ( array_key_exists( 'X-Forwarded-For', $headers ) && filter_var( $headers['X-Forwarded-For'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) ) { $the_ip = $headers['X-Forwarded-For']; } elseif (array_key_exists('HTTP_X_FORWARDED_FOR', $headers ) && filter_var($headers['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { $the_ip = $headers['HTTP_X_FORWARDED_FOR']; } else { $the_ip = filter_var( $_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ); } return $the_ip; }
Отправить POST запрос на PHP
function postRequest($url, $post = 0){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url ); // отправляем на curl_setopt($ch, CURLOPT_HEADER, 0); // пустые заголовки curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвратить то что вернул сервер curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // следовать за редиректами curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);// таймаут4 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookie.txt'); // сохранять куки в файл curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__).'/cookie.txt'); curl_setopt($ch, CURLOPT_POST, $post!==0 ); // использовать данные в post if($post) curl_setopt($ch, CURLOPT_POSTFIELDS, $post); $data = curl_exec($ch); curl_close($ch); return $data; }
Пользоваться так
$data = postRequest('https://www.google.com/recaptcha/api/siteverify', array('secret'=>'','response'=>'', 'remoteip'=>''));
Как найти, где находится функция php
$reflFunc = new ReflectionFunction('function_name'); print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine();
Как найти, где находится класс в php
идентично верхнему коду, можно найти и местоположение любого не встроенного класса в php
$ref = new ReflectionClass('Application'); print $ref->getFileName() . ':' . $ref->getStartLine();
Как получить все методы у объекта или класса в php
print_r(get_class_methods($obj));
Как удалить папку с файлами или почистить папку с файлами
function cleanDirectory($dir, $remove = false) { if ($objs = glob($dir."/*")) { foreach($objs as $obj) { is_dir($obj) ? cleanDirectory($obj, true) : unlink($obj); } } if ($remove) { rmdir($dir); } }
пользуемся так
Если нужно просто отчистить директорию то запускаем без второго параметра, если после очистки нужно еще и удалить ее то вторым параметром подаем true
cleanDirectory('/home/www/files/images'); // очистка cleanDirectory('/home/www/files/images', true); // удаление
Как отдать на загрузку какой-либо файл на сервере с помощью php
универсальный загрузчик выглядит так
function download ($file) { if (!empty($file) and file_exists($file) and is_file($file)) { if (ob_get_level()) { ob_end_clean(); } header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . basename($file)); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); if ($fd = fopen($file, 'rb')) { while (!feof($fd)) { print fread($fd, 1024); } fclose($fd); } } else { header('HTTP/1.0 404 Not Found'); echo 'File not found'; } exit(); }
Сгенерировать строку из случайных символов
Часто надо сгененрировать случайную строку для соли или еще для чего
function generateHash ($length = 8){ $password = ""; $possible = "2346789bcdfghjkmnpqrtvwxyzBCDFGHJKLMNPQRTVWXYZ"; $maxlength = strlen($possible); if ($length > $maxlength) { $length = $maxlength; } $i = 0; while ($i < $length) { $char = substr($possible, mt_rand(0, $maxlength-1), 1); if (!strstr($password, $char)) { $password .= $char; $i++; } } return $password; }
универсальный загрузчик выглядит так
Узнать, пришел ли запрос через AJAX
Этот способ работает только с jQuery. Она при AJAX запросе добавляет заголовок HTTP_X_REQUESTED_WITH=XMLHttpRequest
в запрос
Поэтому, можно написать на сервере функцию проверки
function isAjax(){ return isset($_SERVER['HTTP_X_REQUESTED_WITH']) and $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'; }
Joomla сниппеты
- Информация о материале
- Категория: Joomla
- Просмотров: 10371
Этой статьей открываю новый раздел сайта. В нем будут перечислены все мои находки, которые могут послужить кому-то еще. Найдены в англоязычных источниках
Как написать Joomla плагин для xmap
- Информация о материале
- Категория: Joomla
- Просмотров: 9572
Ранее на страницах блока была серия статей о написании своего компонента для популярной среди непрофессиональных разработчиков системы Joomla. Времени прошло достаточно, и вот ваш компонент уже оброс данными. Данных много, ведь помимо прочего мы еще подключили к компонентe парсер, для быстрого наполнения сайта. Однако поисковики очень не охотно индексируют ваш контент.
Информации в сети так много и обновляется она так часто, что поисковые системы просто не успевают проверять, обновилась ли ваша главная страница, или того хуже вложенная. В результате информация на сайте есть, но поисковик про нее узнает в последнюю очередь.
Для таких случаев придумали sitemap. Это такая xml в которой описаны все ссылки сайта, которые необходимо проиндексировать, и у каждой есть поле, в котором написано, когда контент по этой ссылке последний раз обновлялся.
Поисковику достаточно раз в день проверять этот файл индексировать лишь измененные страницы.
Среди joomla компонентов, которые создают sitemap, одним из лидеров дефакто является xmap. Сам xmap выводит в sitemap только ссылки размещенные в меню. Это не совсем удобно, когда мы хотим, чтобы в sitemap появились ссылки из нашего компонента. На помощь приходят плагины xmap. У этого компонента в загашнике есть несколько плагинов для популярных компонентов (k2,weblinks и т.д.) есть плагин и для стандартных материалов joomla.