Yii сниппеты
- Информация о материале
- Категория: Yii
- Просмотров: 12967
Статьи
Отличная статья по настройке таблицы
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
- Просмотров: 13391
Получить реальный 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 )); |
Как удалить папку с файлами или почистить папку с файлами
1 2 3 4 5 6 7 8 9 10 | 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
1 2 | 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
- Просмотров: 13279
Этой статьей открываю новый раздел сайта. В нем будут перечислены все мои находки, которые могут послужить кому-то еще. Найдены в англоязычных источниках
Как написать Joomla плагин для xmap
- Информация о материале
- Категория: Joomla
- Просмотров: 12232
Ранее на страницах блока была серия статей о написании своего компонента для популярной среди непрофессиональных разработчиков системы Joomla. Времени прошло достаточно, и вот ваш компонент уже оброс данными. Данных много, ведь помимо прочего мы еще подключили к компонентe парсер, для быстрого наполнения сайта. Однако поисковики очень не охотно индексируют ваш контент.
Информации в сети так много и обновляется она так часто, что поисковые системы просто не успевают проверять, обновилась ли ваша главная страница, или того хуже вложенная. В результате информация на сайте есть, но поисковик про нее узнает в последнюю очередь.
Для таких случаев придумали sitemap. Это такая xml в которой описаны все ссылки сайта, которые необходимо проиндексировать, и у каждой есть поле, в котором написано, когда контент по этой ссылке последний раз обновлялся.
Поисковику достаточно раз в день проверять этот файл индексировать лишь измененные страницы.
Среди joomla компонентов, которые создают sitemap, одним из лидеров дефакто является xmap. Сам xmap выводит в sitemap только ссылки размещенные в меню. Это не совсем удобно, когда мы хотим, чтобы в sitemap появились ссылки из нашего компонента. На помощь приходят плагины xmap. У этого компонента в загашнике есть несколько плагинов для популярных компонентов (k2,weblinks и т.д.) есть плагин и для стандартных материалов joomla.
miniMySQLAdmin - легковесная альтернатива phpMyAdmin
- Информация о материале
- Категория: Мои проекты
- Просмотров: 13328
miniMySQLAdmin
miniMySQLAdmin это такой mini аналог phpMyAdmin. Функционал урезан, и некоторые операции без знания SQL не сделать.
Вы можете
скачать исходную версию
и дополнить ее, либо скачать лишь
один файл
и пользоваться только им
Также вы можете пощупать программу на
демо данных
Разработчики сайтов ежедневно работают с phpMyAdmin. Эта программа единолично занимает нишу администрирования MySQL баз данных. Есть множество десктопных аналогов, но когда доступ надо предоставить через web, тут у phpMyAdmin конкуренции нет.
Единственный существенный минус phpMyAdmin - размер. Мультиязычность, поддержка всех возможных кодировок, проработанность всех необходимых операций, практически без знания SQL - все это требует места.
Когда нужно быстро исправить пару строк в таблице, а заказчик дал только ftp доступ, заливать все это на сервер в распакованном виде проблематично.
Для разовых правок базы данных мной была разработана miniMySQLAdmin. Все, что нужно, в ней содержится в одном файле, размером 300кб.