Ошибка Denwer: make_sock could not bind to adress 0.0.0.0:80

Если при запуске Denwer вы видите ошибку:
make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
значит 80-ый порт занят другим приложением. Есть 2 варианта решения этой проблемы.

1) Отключить приложение, которое заняло порт.

2) Перевесить Denver на другой порт. Для этого необходимо открыть файл C:\WebServers\usr\local\apache\conf\httpd.conf и найти в нем строки:
Listen 80
заменить на
Listen 8080
затем
#Listen $&{ip:-127.0.0.1}:$&{port:-80}
#NameVirtualHost $&{ip:-127.0.0.1}:$&{port:-80}
#<VirtualHost $&{ip:-127.0.0.1}:$&{port:-80}>
заменить на
#Listen $&{ip:-127.0.0.1}:$&{port:-8080}
#NameVirtualHost $&{ip:-127.0.0.1}:$&{port:-8080}
#<VirtualHost $&{ip:-127.0.0.1}:$&{port:-8080}>
и еще на всякий случай изменить порты для ssl соединения:
#Listen $&{ip:-127.0.0.1}:$&{port_ssl:-443}
#NameVirtualHost $&{ip:-127.0.0.1}:$&{port_ssl:-443}
#<VirtualHost $&{ip:-127.0.0.1}:$&{port_ssl:-443}>
заменить на
#Listen $&{ip:-127.0.0.1}:$&{port_ssl:-4430}
#NameVirtualHost $&{ip:-127.0.0.1}:$&{port_ssl:-4430}
#<VirtualHost $&{ip:-127.0.0.1}:$&{port_ssl:-4430}>
После перезапуска Denwer все должно работать. Только теперь что бы открыть хосты необходимо в адрес добавлять номер порта, в данном случае 8080, например: http://localhost:8080/

Онлайн файловый менеджер

ElFinder – скрипт онлайн файл-менеджера. Позволяет почти полностью заменить FTP.


Приложение позволяет просматривать, массово загружать, редактировать и делать поиск файлов и каталогов. Есть предпросмотр изображений.
Для установки необходимо скачать пакет отсюда и распаковать в папку вебсервера. По-умолчанию в список каталогов добавлен только files, который лежит в корне скрипта. Для того, что бы добавить новые источники необходимо открыть файл connector.php и добавить новые пути во фрагменте:

$opts = array(
// 'debug' =&gt; true,
'roots' =&gt; array(
	array(
	'driver' =&gt; 'LocalFileSystem',  
	'path' =&gt; 'L:/',         
	'URL'           =&gt; 'L:/', 
	'accessControl' =&gt; 'access'         
	)
)
);

После этого ваши каталоги добавятся в боковом меню.

Все о ЧПУ и ModRewrite на PHP

ЧПУ или человеко-понятные урлы термин в сайтостроение – когда URL выглядит как структура папок, по которым можно понять куда он ведет.
Вот пример двух URL:

http://www.site.ru/index.php?action=viewgroup&id=27

http://www.site.ru/products/fish

По первому URL-у нельзя определить куда мы перейдем, по второму можно понять, что это раздел с продуктами и подразделом Рыба.
Рассмотрим 2 способа как это реализовать программно.
1. С помощью apache modRewrite
В корне сайта создаем файл с название .htaccess и вписываем в него;

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

После этого создаем файл index.php с текстом:

echo $_GET['q'];

При любом запросе modRewrite будем перекидывать нас на скрипт index.php. В скрипте уже обрабатывать url-ы. Способ не будет работать на хостингах без поддержки mod_rewrite.

2. С помощью 404-ой ошибки
Этот способ стоит использовать, если с первым возникли проблемы. У него есть существенный недостаток. При сабмите формы, которая будет находится на виртуальной странице данные нельзя будет посмотреть внутри скрипта. Придется для каждой формы писать свой обработчик.
Для начала необходимо создать файл .htaccess с текстом:

ErrorDocument 404 /index.php

Данные о запросах можно будет посмотреть в переменной окружение $_SERVER['REQUEST_URI'].
При использовании этого способа необходимо внимательно следить, что бы на странице не было несуществующих css и img элементов, так как это может создать большую нагрузку на сервер из-за того, что все будет переадресовано на скрипт.

Скрипт статистики посещений

Webstat – один из лучших скритов статистики на PHP. Он может размещаться в виде обычного счетчика, типа как liveinternet, а так же быть невидимым. Вся статистика доступна в панели адмнистратора. Можно посмотреть сводную статистику, откуда приходили посетители, с каких поисковых систем и запросов, всю возможную информацию о браузере и системе пользователей, место откуда пришел посетитель. Кроме этого есть топ страниц по посещаемости.
Для установки скрипта необходимо:

1. Скопировать папку со скриптом, например в корень сайта.

2. Перейти браузером в созданную папку.

3. Выполнить установку указав данные базы данных

4. После установки удалить папку _setup

5. Установить счетчик на страницы – для этого необходимо открыть панель администратора (логин/пароль по-умолчанию admin/admin) и скопировать html код на страницу.


Скачать скрипт можно здесь – http://allphp.ru/wp-content/uploads/2010/12/stats.zip

Работа с интерфейсом XML-RPC из PHP

XML-RPC – (сокр. Extensible Markup Language Remote Procedure Call — XML-вызов удалённых процедур) – стандарт вызова удалённых процедур, основанный на XML. То есть клиент посылает запрос в формате XML, например:

 <?xml version="1.0"?>
 <methodCall>
   <methodName>test.testMethod</methodName>
   <params>
     <param>
         <value><par>123</par></value>
     </param>
   </params>
 </methodCall>

в ответ так же получает XML документ, например:

 <?xml version="1.0"?>
 <methodResponse>
   <params>
     <param>
         <value><string>Test</string></value>
     </param>
   </params>
 </methodResponse>

Для работы с этим интерфейсом я использую библиотеку IRX – http://scripts.incutio.com/xmlrpc/

Рассмотрим пример работы с xmlrpc с api сайта sape.ru (самая популярная в России биржа продажи ссылок). Описание функций можно посмотреть здесь: http://api.sape.ru/xmlrpc/.
1. Авторизация

$IRX = new IXR_Client('api.sape.ru', '/xmlrpc/');
$IRX->query('sape.login', ЛОГИН, ПАРОЛЬ, false);

2. Выполняем запросы

//1. массив всех сайтов в системе с полной информацией о них
$IRX->query('sape.get_sites');
$res = $IRX->getResponse();
 
//2. баланс пользователя
$IRX->query('sape.get_balance');
$res = $IRX->getResponse();
 
//3. список страниц 
$IRX->query('sape.get_site_pages', НОМЕР_САЙТА);
$res = $IRX->getResponse();
 
//список всех доступных функций - http://api.sape.ru/xmlrpc/

html5 видео-плеер

Uppod HTML5 – первый плеер видео для html страниц без использования flash. Сам плеер и пример можно скачать здесь Uppod Html5 плеер.
Для установки плеера на страницу необходимо просто вставить строку:

<script src="uppod.js" type="text/javascript"></script>

в область head.
Сам плеер размещается внутри контейнера, например так:

<div class="player" id="videoplayer"></div>
<script type="text/javascript">
this.player = new Uppod(
{m:"video",
uid:"videoplayer",
file:"ссылка",
poster:"ссылка"
});</script>

где m – режим работы (audio или video)
id – ид контейнера, где будет размещен плеер
file – ссылка на видео-файл
poster – картинка с заставкой.
Читать далее

Организация показа видео на сайте

Показ видео-роликов на сайте можно организовать с помощью видео-хостингов Youtube, Rutube и т.д. А можно сделать и своими силами. Для конвертации видео будет использоваться консольный декодер ffmpeg. Показ будет осуществляться через бесплатный плеер uppod.
Рассмотрим пошагово пример создания простейшего видео-хостинга. С возможностью закачки видео и просмотра списка загруженных видео.
Читать далее

Парсер погоды на php с gismeteo.

Здесь я напишу о том, как можно загрузить данные с сайта gismeteo о погоде в любом городе на неделю вперед. Загружается вся информация, которая доступна на портале. На входе – номера городов, на выходе база данных со всеми полями. Из этой базы данных потом можно будет вывести данные о погоде в любом удобном виде.
Данные будут хранится в MySQL таблице

CREATE TABLE pogoda (
p_id INT NOT NULL PRIMARY KEY auto_increment
cp_id INT,
p_date DATE,
p_daypart INT,
p_obl INT,
p_osad CHAR(255),
p_temp INT,
p_davl INT,
p_vlazh INT,
p_wind_dir INT,
p_wind_speed INT,
p_comfort INT
)

Читать далее

MSSQL и хеши

При разработке одного сервиса столкнулся с одной проблемой, необходимо было искать данные по md5-хешу. Для этого есть функция:

HashBytes(алгоритм, строка)

Где алгоритм – метом хеширования, один из – MD2, MD4, MD5, SHA, SHA1.

Но есть одна проблема, если мы сделаем к примеру запрос:

SELECT * FROM TABLE WHERE HashBytes('md5',password)="202CB962AC59075B964B07152D234B70"

то он ничего не вернет, даже если в таблице все таки есть значение “123″ (хеш которого – 202CB962AC59075B964B07152D234B70). Дело в том, что значение, которое возвращает функция HashBytes имеет тип varbinary. Что бы привести его к строке необходимо использовать системную функцию master.dbo.fn_varbintohexstr, перед ее использованием следует вырезать первые 3 символа из того, что вернет HashBytes. Это связано, что строка возвращается в виде 0x202CB962AC59075B964B07152D234B70.

Выше указанный запрос должен иметь вид:

SELECT * FROM TABLE WHERE SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5',NAME)), 3, 32)=
"202CB962AC59075B964B07152D234B70"

Есть еще один способ, можно самому написать хранимую процедуру и использовать ее (в полной версии пример, код не мой):
Читать далее

Ajax с точки зрения jquery

Jquery – одна из популярных Javascript библиотек. Она достаточно хорошо ориентирована для разработки ajax-приложений. При этом код получается очень компактным.
Я рассмотрю 3 подхода из множества возможных:
1. Стандартный, через $.post и $.get
2. Загрузка данных в элемент через $.load
3. Подгрузка скрипта с сервера с помощью getScript.
Читать далее