Мониторим домены

Небольшой скрипт на php для мониторинга освободившихся доменов в помощь лентяям.
 

<?php

$domains = array(
    'domain1.ru',
    'domain2.ru'
);

$email = 'my@email.com';

foreach($domains as $domain)
{
    $inf = check_domain($domain);
    if(!isset($inf['free-date']))
    {
        $text = 'DOMAIN ' . $domain . ' FREE';
        mail($email,$text, $text);
    }
}

function check_domain( $domain )
{
    $curl = curl_init();
    curl_setopt( $curl, CURLOPT_URL,'r01.ru/domain/whois/check-domain.php?domain=' . $domain);
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curl,CURLOPT_FOLLOWLOCATION,true);
    $result = curl_exec($curl);
    $info = array();
    $infoField = array(
        'free-date',
        // 'domain','type','descr','state','nic-hdl','person','phone','fax-no','e-mail','reg-till','created','changed', 'registrar'
    );
    foreach($infoField as $field)
    {
        preg_match('#' . $field . ': (.*)#',$result,$m);
        $info[$field] = isset($m[1]) ? strip_tags($m[1]) : '';
    }
    return $info;
}

Запускать скрипт по крону, раз в 5-10 минут. PS Письма по-умолчанию будут падать в спам.

URL без завершающих слэшей и www

Часто бывает нужно убрать www и завершающие слэши из всех URL. Данную операцию достаточно просто выполнить при помощи кода в .htaccess #Если вы хотите, чтобы всегда был домен с www RewriteCond %{HTTP_HOST} ^domen\.ru RewriteRule ^(.*)$ http://www.domen.ru/$1 [R=301,L] #Если вы хотите, чтобы всегда был домен без www RewriteCond %{HTTP_HOST} ^www\.domen\.ru RewriteRule ^(.*)$ http://domen.ru/$1 [R=301,L] #Добавить завершающий слэш RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*[^/])$ $1/ [L,R=301] #Удалить завершающий слэш RewriteBase / RewriteCond %{HTTP_HOST} (.*) RewriteCond %{REQUEST_URI} /$ [NC] RewriteRule ^(.*)(/)$ $1 [L,R=301]

Расширение всех файлов в XML формате

Не нашел нигде список всех расширений файлов, но зато наткнулся на сайт http://open-file.ru в котором приведен весь список расширений. Решил написать небольшой скрипт, который вытянет все расширения с описаниями и типами в XML файл. Ниже код скрипта:

<?php

set_time_limit(0);
$url = 'http://open-file.ru';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$result = curl_exec($ch);
preg_match('~<p>(.*)</p>~',$result,$match);
preg_match_all('~<a href="(/types/.*/)">.*</a>~Us',$match[1],$match);
$extension = array();
$xml = '<?xml version="1.0" encoding="UTF-8"?>
<extensions>';
foreach( $match[1] as $link )
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, ( $url . $link ));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    $result = curl_exec($ch);
    preg_match( '~<table>(.*)</table>~Us', $result, $table );

    $reg = array(
        '~<tr><td>.*<a href="/types/.*">(.*)</a>.*</td>',
        '<td>.*<a href="/types/.*/">(.*)</a>.*</td><td>',
        '.*<a href="/types/.*">(.*)</a>.*</td></tr>~'
    );

    preg_match_all(implode($reg),$table[1],$data);
    foreach( $data[1] as $key => $ext )
    {
        $xml .= '
            <extension>
                <name><![CDATA[' . $ext . ']]></name>
                <type><![CDATA[' . $data[2][$key] . ']]></type>
                <description><![CDATA[' . $data[3][$key] . ']]></description>
           </extension>
';
   }
}

$xml .= '</extensions>';

file_put_contents('tmp/extensions.xml' , iconv( 'cp1251', 'utf8', $xml ) );

Архив со всеми расширениями файлов в формате XML: extensions.xml.zip

Скрипт для отправки обновлений на почту

Для одного проекта понадобилось высылать заказчику обновления ( pack ), так как это рутинная задача, я решил написать простой скрипт на shell:
 

#!/bin/sh 

# Мыльник куда отправляем пакет с обновлениями 
EMAIL=$1 

# Директория с проектом 
PROJECT=/var/www/my_project 

# Дата ( для заголовка письма и названия файла архива с обновлением ) 
DATE=`date +%d-%m-%Y_%H-%M` 

# Название файла архива с обновлением 
TARNAME=pack_my_project_$DATE.tgz 

# Локальная директория в которой сохраняются архивы с обновлениями 
PACK=pack/$TARNAME 

# Изменения в проекте ( git ) 
CHANGE=`cd $PROJECT && git diff --stat | awk 'NF != 7 {print $1}' && cd - > /dev/null` 

# Тема письма с архивом обновления 
SUBJECT='Обновление project от $DATE' 

# Тело письма, опционально 
BODY='' 

# Создаем архив с изменениями и отправляем письмо
cd $PROJECT && \
tar czf $PACK $CHANGE > /dev/null && \
( ( echo $BODY $CHANGE ); uuencode $PACK $TARNAME ) \ 
| mail -s "Обновление project от $DATE" $EMAIL && \
cd - > /dev/null 

в .zshrc прописываем путь к директории к скрипту и ставим разрешение на выполнение файла Отправляем:
 $ my_project_update.sh test@gmail.com 
Сообщение с паком уйдет на почту. TODO: Мою задачу скрипт решает полностью, но его можно доработать: 1) проверка наличия параметра $1 2) проверка, что в проекте реально есть изменения

Быстрое добавление множества директорий в .gitignore

Часто в проекте есть директория uploads/ с вложениями, содержимое в которых не нуждаются в поддержки версионности, для того чтобы не утомлять себя ручным вводом каждой директории можно воспользоваться командой:
 $ ls -l uploads | awk {'print "/uploads/"$9"/*"'} > ../.gitignore 
Дело сделано, нужные директории теперь не будут включены в репозитарий.

Ошибка ld: symbol(s) not found for architecture x86_64

При попытке собрать php-5.2.10 на macOS 10.8.2, появляется ошибка ld: symbol(s) not found for architecture x86_64. Решить проблему можно следующем образом: 1) добавляем в Makefile строку EXTRA_CFLAGS=-lresolv 2) меняем в ext/iconv/iconv.c #define iconv libiconv to #define iconv iconv После этого php собирается отлично и без проблем. Источник: https://discussions.apple.com/thread/3507736?start=0&tstart=0

Выравнивание дива по вертикали и горизонтали

Иногда бывает нужно отцентрировать div на странице, это достаточно просто сделать через абсолютное позиционирование:
 <!DOCTYPE html> 
<html> 
<head> 
<style type="text/css"> 
div { 
background-color: #000; 
height: 500px; 
left: 50%; 
margin: -250px 0 0 -250px; 
top: 50%; 
position: absolute; 
width: 500px; 
} 
</style> 
</head> 
<body> 
<div></div> 
</body> 
</html> 
Это создаст квадрат Малевича 500x500 пикселей по центу страницы.

Видео с Youtube поверх дива с position=fixed

Столкнулся с проблемой отображения iframe с видео c Youtube поверх дива с position=fixed Вот решение: прописываем у ссылке на ролик get параметр wmode=transparent и заводим в фрейме новый атрибут wmode="Opaque <iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/lzQgAR_J1PI?wmode=transparent" frameborder="0" wmode="Opaque"> Решение на JS с поддержкой jquery: $(document).ready(function() $('iframe').each(function() var url = $(this).attr("src"); var char = "?"; if(url.indexOf("?") != -1) var char = "&"; $(this).attr("src",url+char+"wmode=transparent"); ); );