10 супер полезных PHP фрагментов кода

      PHP

Здравствуйте уважаемые читатели XoZblogа! При работе с PHP, очень важно иметь «инструментарий» полезных функций и фрагментов кода, которые могут сэкономить много времени при необходимости. Сегодня я собираюсь показать Вам 10 супер полезных фрагментов кода, о которых Вы, вероятно, никогда не слышали.

Отправка SMS с использованием PHP TextMagic API

Если по какой-то причине, Вы должны отправлять SMS своим клиентам на телефоны, Вам обязательно надо ознакомиться с сервисом TextMagic.  TextMagic обеспечивают легкий API, которые позволяют отправлять SMS на сотовые телефоны. TextMagic работает с российскими сотовыми операторами, что не мало важно, их перечь можно найти на сайте TextMagic. Услуги  являются платными, в среднем 1 SMS обходится в 2рубля.

Пример кода ниже показывает, как легко можно отправить SMS на мобильный телефон с использованием TextMagic API:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Подключаем библиотеку TextMagic
require('textmagic-sms-api-php/TextMagicAPI.php');

// Устанавливаем свой логин и пароль в системе
$username = 'myusername';
$password = 'mypassword';
$router = new TextMagicAPI(array(
   'username' => $username,
   'password' => $password
));

// Отправляем SMS на номер '999-123-4567'
$result = $router->send('Wake up!', array(9991234567), true);

// result:  Result is: Array ( [messages] => Array ( [19896128] => 9991234567 ) [sent_text] => Wake up! [parts_count] => 1 )

Автоматическое создание пароля

Хотя я лично предпочитаю оставить пользователям возможность выбирать свой пароль самим, но для тех кто считает, что автоматическое создание предпочтительней следующий скрипт.
Следующая функция является гибкой для создания пароля: Вы можете выбрать желаемую длину и силу для пароля.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// Устанавливаем параметры и генерируем пароль
// $length - длина пароля, $strength - сила пароля
function generatePassword($length=9, $strength=8) {
 $vowels = 'aeuy';
 $consonants = 'bdghjmnpqrstvz';
 if ($strength >= 1) {
 $consonants .= 'BDGHJLMNPQRSTVWXZ';
 }
 if ($strength >= 2) {
 $vowels .= "AEUY";
 }
 if ($strength >= 4) {
 $consonants .= '23456789';
 }
 if ($strength >= 8 ) {
 $vowels .= '@#$%';
 }
// Генерируем пароль
 $password = '';
 $alt = time() % 2;
 for ($i = 0; $i < $length; $i++) {
 if ($alt == 1) {
 $password .= $consonants[(rand() % strlen($consonants))];
 $alt = 0;
 } else {
 $password .= $vowels[(rand() % strlen($vowels))];
 $alt = 1;
 }
 }
 return $password;
}
echo generatePassword();

Определение места по IP

Вот полезный фрагмент кода для определения расположения конкретного IP. Ниже функция принимает один IP в качестве параметра, и возвращает местоположение IP. Если местоположение не найдено, возвращается UNKNOWN.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
function detect_city($ip) {
        $default = 'UNKNOWN';

        if (!is_string($ip) || strlen($ip) < 1 || $ip == '127.0.0.1' || $ip == 'localhost')
            $ip = '8.8.8.8';

        $curlopt_useragent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)';

        $url = 'http://ipinfodb.com/ip_locator.php?ip=' . urlencode($ip);
        $ch = curl_init();

        $curl_opt = array(
            CURLOPT_FOLLOWLOCATION  => 1,
            CURLOPT_HEADER      => 0,
            CURLOPT_RETURNTRANSFER  => 1,
            CURLOPT_USERAGENT   => $curlopt_useragent,
            CURLOPT_URL       => $url,
            CURLOPT_TIMEOUT         => 1,
            CURLOPT_REFERER         => 'http://' . $_SERVER['HTTP_HOST'],
        );

        curl_setopt_array($ch, $curl_opt);

        $content = curl_exec($ch);

        if (!is_null($curl_info)) {
            $curl_info = curl_getinfo($ch);
        }

        curl_close($ch);

        if ( preg_match('{<li>City : ([^<]*)</li>}i', $content, $regs) )  {
            $city = $regs[1];
        }
        if ( preg_match('{<li>State/Province : ([^<]*)</li>}i', $content, $regs) )  {
            $state = $regs[1];
        }

        if( $city!='' && $state!='' ){
          $location = $city . ', ' . $state;
          return $location;
        }else{
          return $default;
        }

    }

Показать исходный код любой веб-страницы

Хотите отображать исходный код любой веб-страницы, с нумерацией строк? Вот фрагмент кода, чтобы реализовать это. Просто измените URL в первой строке на нужный Вам.

1
2
3
4
$lines = file('http://google.com/');
foreach ($lines as $line_num => $line) {
   // Делим на строки и нумеруем
   echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br>\n"; }

Зашифровано ли соединение (https)?

Хороший вопрос. Этот удобный фрагмент может дать Вам ответ. Ничего сложного!

1
2
3
4
5
if ($_SERVER['HTTPS'] != "on") {
   echo "This is not HTTPS";
}else{
   echo "This is HTTPS";
}

Показать количество like у Вашей Facebook странички

Хотите отобразить на блоге, количество пользователей, которым понравилась Ваша Facebook страничка? Это очень легко, используя следующий фрагмент:

1
2
3
4
5
function fb_fan_count($facebook_name){
    // Например: http://graph.facebook.com/digimantra
    $data = json_decode(file_get_contents("http://graph.facebook.com/".$facebook_name));
    echo $data->likes;
}

Получить информацию о используемой памяти

Для того чтобы оптимизировать скрипты, Вам определенно необходимо знать, какой объем оперативной памяти они используют на сервере. Этот фрагмент кода будет проверять память, а затем покажет начальный, конечный и пикового объем использованной памяти.

1
2
3
4
echo "Initial: ".memory_get_usage()." bytes \n";
/* All script */
echo "Final: ".memory_get_usage()." bytes \n";
echo "Peak: ".memory_get_peak_usage()." bytes \n";

Сжатие данных с использованием gzcompress()

При работе со строками, бывает возникает необходимость сжатия данных. Использование gzcompress () функции, строки могут быть сжаты. Для обратного действия, просто вызываем gzuncompress (), как показано ниже:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$string =
"Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Nunc ut elit id mi ultricies
adipiscing. Nulla facilisi. Praesent pulvinar,
sapien vel feugiat vestibulum, nulla dui pretium orci,
non ultricies elit lacus quis ante. Lorem ipsum dolor
sit amet, consectetur adipiscing elit. Aliquam
pretium ullamcorper urna quis iaculis. Etiam ac massa
sed turpis tempor luctus. Curabitur sed nibh eu elit
mollis congue. Praesent ipsum diam, consectetur vitae
ornare a, aliquam a nunc. In id magna pellentesque
tellus posuere adipiscing. Sed non mi metus, at lacinia
augue. Sed magna nisi, ornare in mollis in, mollis
sed nunc. Etiam at justo in leo congue mollis.
Nullam in neque eget metus hendrerit scelerisque
eu non enim. Ut malesuada lacus eu nulla bibendum
id euismod urna sodales. "
;
// упаковываем
$compressed = gzcompress($string);

echo "Original size: ". strlen($string)."\n";
echo "Compressed size: ". strlen($compressed)."\n";
// Распоковка
$original = gzuncompress($compressed);

Whois запрос при помощи PHP

Если Вам нужно получить информацию Whois для определенного домена, то почему не использовать PHP? Следующая функция реализует это решение, делаем доменное имя в качестве параметра, и получаем информацию Whois.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
function whois_query($domain) {

// исправляем доменное имя:
 $domain = strtolower(trim($domain));
 $domain = preg_replace('/^http:\/\//i', '', $domain);
 $domain = preg_replace('/^www\./i', '', $domain);
 $domain = explode('/', $domain);
 $domain = trim($domain[0]);

$_domain = explode('.', $domain);
 $lst = count($_domain)-1;
 $ext = $_domain[$lst];

$servers = array(
 "biz" => "whois.neulevel.biz",
 "com" => "whois.internic.net",
 "us" => "whois.nic.us",
 "coop" => "whois.nic.coop",
 "info" => "whois.nic.info",
 "name" => "whois.nic.name",
 "net" => "whois.internic.net",
 "gov" => "whois.nic.gov",
 "edu" => "whois.internic.net",
 "mil" => "rs.internic.net",
 "int" => "whois.iana.org",
 "ac" => "whois.nic.ac",
 "ae" => "whois.uaenic.ae",
 "at" => "whois.ripe.net",
 "au" => "whois.aunic.net",
 "be" => "whois.dns.be",
 "bg" => "whois.ripe.net",
 "br" => "whois.registro.br",
 "bz" => "whois.belizenic.bz",
 "ca" => "whois.cira.ca",
 "cc" => "whois.nic.cc",
 "ch" => "whois.nic.ch",
 "cl" => "whois.nic.cl",
 "cn" => "whois.cnnic.net.cn",
 "cz" => "whois.nic.cz",
 "de" => "whois.nic.de",
 "fr" => "whois.nic.fr",
 "hu" => "whois.nic.hu",
 "ie" => "whois.domainregistry.ie",
 "il" => "whois.isoc.org.il",
 "in" => "whois.ncst.ernet.in",
 "ir" => "whois.nic.ir",
 "mc" => "whois.ripe.net",
 "to" => "whois.tonic.to",
 "tv" => "whois.tv",
 "ru" => "whois.ripn.net",
 "org" => "whois.pir.org",
 "aero" => "whois.information.aero",
 "nl" => "whois.domain-registry.nl"
 );

if (!isset($servers[$ext])){
 die('Error: No matching nic server found!');
 }

$nic_server = $servers[$ext];

$output = '';

 if ($conn = fsockopen ($nic_server, 43)) {
 fputs($conn, $domain."\r\n");
 while(!feof($conn)) {
 $output .= fgets($conn,128);
 }
 fclose($conn);
 }
 else { die('Error: Could not connect to ' . $nic_server . '!'); }

return $output;
}

Отправка отчета об ошибке PHP на Email, вместо отображения ошибки

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// Обработчик ошибок
function nettuts_error_handler($number, $message, $file, $line, $vars){
 $email = "
 <p>An error ($number) occurred on line
 <strong>$line</strong> and in the <strong>file: $file.</strong>
 <p> $message </p>"
;

$email .= "<pre>" . print_r($vars, 1) . "</pre>";

$headers = 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Кому отправляем
 error_log($email, 1, 'example@mail.ru', $headers);

// реагируем на ошибку уведомление
 if ( ($number !== E_NOTICE) && ($number < 2048) ) {
 die("Ошибка в сценарии!");
 }
}

// Применяем нашу функцию для обработки ошибок
set_error_handler('nettuts_error_handler');

// Ошибка)
echo $somevarthatdoesnotexist;

Все! Если возникнут вопросы или предложения пишем комментарии! До встречи )

Чтобы оставаться в курсе свежих статей и уроков подписывайтесь на еженедельную почтовую рассылку или на новостную ленту RSS. Спасибо!