Сжатие строк

Кода мы говорим о сжатии, то на ум сразу же приходят архивные файлы в формате ZIP. PHP предоставляет возможность сжатия длинных строк без всяких файлов.

В следующем примере продемонстрируем работу функций gzcompress() и gzuncompress():

$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";
/* выведет
Original size: 800
*/
 
echo "Compressed size: ". strlen($compressed)."\n";
/* выведет
Compressed size: 418
*/
 
// возвращаем
$original = gzuncompress($compressed);

В наших силах уменьшить объём текста на 50%. В этих же целях можно использовать методы gzencode() и gzdecode(), которые используют другой алгоритм сжатия.

Добавлено: 10 Мая 2018 18:48:43 Добавил: Андрей Ковальчук

Сериализация

Вам когда-нибудь приходилось хранить комплексные данные в базе или в файле? Для того чтобы сконвертировать объект в строку в PHP предусмотрена специальная функция.

Вообще говоря, этих методов 2: serialize() и unserialize()

// сложный массив
$myvar = array(
    'hello',
    42,
    array(1,'two'),
    'apple'
);
 
// конвертируем в строку
$string = serialize($myvar);
 
echo $string;
/* выведет
a:4:{i:0;s:5:"hello";i:1;i:42;i:2;a:2:{i:0;i:1;i:1;s:3:"two";}i:3;s:5:"apple";}
*/
 
// получаем исходное значение
$newvar = unserialize($string);
 
print_r($newvar);
/* выведет
Array
(
    [0] => hello
    [1] => 42
    [2] => Array
        (
            [0] => 1
            [1] => two
        )
 
    [3] => apple
)
*/

Вот так вот работают эти функции. Однако из-за бурного роста популярности JSON, в PHP 5.2 были добавлены 2 метода json_encode() и json_decode(). Их работа схожа с serialize():
// сложные массив
$myvar = array(
    'hello',
    42,
    array(1,'two'),
    'apple'
);
 
// конвертируем в строку
$string = json_encode($myvar);
 
echo $string;
/* выведет
["hello",42,[1,"two"],"apple"]
*/
 
// восстанавливаем исходное значение
$newvar = json_decode($string);
 
print_r($newvar);
/* prints
Array
(
    [0] => hello
    [1] => 42
    [2] => Array
        (
            [0] => 1
            [1] => two
        )
 
    [3] => apple
)
*/

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

Добавлено: 10 Мая 2018 18:47:54 Добавил: Андрей Ковальчук

Генерирование уникальных ID

Бывают такие моменты, когда вам надо сгенерировать уникальную строку. Множество раз я видел, что для решения этой задачи используют функцию md5():

// генерируем случайную строку
echo md5(time() . mt_rand(1,1000000));

Но на самом деле для этих целей в PHP есть специальная функция uniqid()
// генерируем случайную строку
echo uniqid();
/* выведет
4bd67c947233e
*/
 
// ещё разок
echo uniqid();
/* выведет
4bd67c9472340
*/

Невооружённым взглядом можно заметить, что первые символы мягко говоря схожи… Так происходит из-за того, что данный метод использует время сервера для генерации символов. Это даже полезно, т.к. все сгенерированные значения получаются в алфавитном порядке, что даёт возможность быстро их сортировать.

Для того чтобы уменьшить шансы получения дубликата, мы можем добавить префикс или использовать второй параметр (увеличит количество символов):
// с префиксом
echo uniqid('foo_');
/* выведет
foo_4bd67d6cd8b8f
*/
 
// со вторым параметром
echo uniqid('',true);
/* выведет
4bd67d6cd8b926.12135106
*/
 
// оба
echo uniqid('bar_',true);
/* выведет
bar_4bd67da367b650.43684647
*/

Этот метод генерирует строки размером меньше, чем md5, тем самым вы сможете сэкономить место.

Добавлено: 10 Мая 2018 18:45:57 Добавил: Андрей Ковальчук

Магические константы

В PHP существует множество магических констант, таких как номер текущей строки (__LINE__), путь к файлу (__FILE__), путь к каталогу (__DIR__), имя функции (__FUNCTION__), имя класса (__CLASS__), имя метода (__METHOD__) и пространства имён (__NAMESPACE__).

Все мы их рассматривать не будем. Посмотрим только лишь парочку:

// этот скрипт зависит от текущего расположения файла и
// может вызвать проблемы, если его использовать из разных дирректорий
require_once('config/database.php');
 
// этот скрипт не вызовет проблем
require_once(dirname(__FILE__) . '/config/database.php');

Используйте __LINE__ при отладке скриптов:
// код
// ...
my_debug("some debug message", __LINE__);
/* выведет
Line 4: some debug message
*/
 
// ещё код
// ...
my_debug("another debug message", __LINE__);
/* выведет
Line 11: another debug message
*/
 
function my_debug($msg, $line) {
    echo "Line $line: $msg\n";
}

Добавлено: 10 Мая 2018 18:45:05 Добавил: Андрей Ковальчук

Информация о процессоре

Для этого необходимо использовать метод getrusage(). Но учтите, что на Windows эта функция работать не будет.

print_r(getrusage());
/* prints
Array
(
    [ru_oublock] => 0
    [ru_inblock] => 0
    [ru_msgsnd] => 2
    [ru_msgrcv] => 3
    [ru_maxrss] => 12692
    [ru_ixrss] => 764
    [ru_idrss] => 3864
    [ru_minflt] => 94
    [ru_majflt] => 0
    [ru_nsignals] => 1
    [ru_nvcsw] => 67
    [ru_nivcsw] => 4
    [ru_nswap] => 0
    [ru_utime.tv_usec] => 0
    [ru_utime.tv_sec] => 0
    [ru_stime.tv_usec] => 6269
    [ru_stime.tv_sec] => 0
)
*/

Картина, изложенная выше, будет понятно тем, у кого есть опыт в системном администрировании. Для всех остальных предлагаем расшифровку:

ru_oublock: количество операций блочной записи
ru_inblock: количество операций блочного чтения
ru_msgsnd: количество отправленных сообщений
ru_msgrcv: количество принятых сообщений
ru_maxrss: максимальный размер невыгружаемого набора
ru_ixrss: общий объем разделяемой памяти
ru_idrss: общий объем неразделяемых данных
ru_minflt: количество используемых страниц памяти
ru_majflt: количество ошибок отсутствия страниц
ru_nsignals: количество принятых сигналов
ru_nvcsw: количество переключений контекста процессом
ru_nivcsw: количество принудительных переключений контекста
ru_nswap: количество обращений к диску при подкачке страниц
ru_utime.tv_usec: время работы в пользовательском режиме (микросекунды)
ru_utime.tv_sec: время работы в пользовательском режиме (секунды)
ru_stime.tv_usec: время работы в привилегированном режиме (микросекунды)
ru_stime.tv_sec: время работы в привилегированном режиме (секунды)

Для того чтобы узнать какие ресурсы вашего процессора используются скриптом, вам необходимо значение ‘user time’ (время работы в пользовательском режиме) и ’system time’ (время работы в привилегированном режиме). Вы можете получить результат как в секундах, так и в микросекундах. Для того чтобы превратить общее количество секунд в десятичное число, вам необходимо разделить значение микросекунд на 1 миллион и добавить к значению секунд.

Запутанно как-то. Вот пример:
// отдыхаем 3 секунды
sleep(3);
 
$data = getrusage();
echo "User time: ".
    ($data['ru_utime.tv_sec'] +
    $data['ru_utime.tv_usec'] / 1000000);
echo "System time: ".
    ($data['ru_stime.tv_sec'] +
    $data['ru_stime.tv_usec'] / 1000000);
 
/* выводит
User time: 0.011552
System time: 0
*/

Хотя выполнение скрипта заняло около 3х секунд, процессор не было сильно нагружен. Дело в том, что при вызове (sleep) скрипт практически не потребляет ресурсов процессора. Вообще существует множество задач, которые занимают значительное время, но при этом не используют процессор. К примеру, ожидание операций связанных с диском. Так что вы не всегда используете процессорное время в своих скриптах.

Вот ещё пример:
// пройтись  10 миллионов раз
for($i=0;$i<10000000;$i++) {
 
}
 
$data = getrusage();
echo "User time: ".
    ($data['ru_utime.tv_sec'] +
    $data['ru_utime.tv_usec'] / 1000000);
echo "System time: ".
    ($data['ru_stime.tv_sec'] +
    $data['ru_stime.tv_usec'] / 1000000);
 
/* выводит
User time: 1.424592
System time: 0.004204
*/

Работа скрипта заняла 1.4 секунды процессорного времени. В данном случае, время системных вызова вообще низко.

Время работы в привилегированном режиме (System Time) – это время, которое процессор затрачивает на выполнение системных запросов к ядру от имени программы. Пример:
$start = microtime(true);
// вызываем microtime каждые 3 секунды
while(microtime(true) - $start < 3) {
 
}
 
$data = getrusage();
echo "User time: ".
    ($data['ru_utime.tv_sec'] +
    $data['ru_utime.tv_usec'] / 1000000);
echo "System time: ".
    ($data['ru_stime.tv_sec'] +
    $data['ru_stime.tv_usec'] / 1000000);
 
/* выводит
User time: 1.088171
System time: 1.675315
*/

Теперь системного времени затратилось намного больше, чем в прошлом примере. Всё благодаря методу microtime(), который использует ресурсы системы.

Однако следует отметить, что выведенное время может быть не точным, т.к. в данный момент времени ресурсы процессора используются и другими программами, что в результате может дать небольшую погрешность.

Добавлено: 10 Мая 2018 18:44:18 Добавил: Андрей Ковальчук

Информация об используемой памяти

Если вы будете отслеживать количество памяти, которое съедается на работу ваших скриптов то, наверное, чаще будете их оптимизировать.

В PHP существует мощный инструмент отслеживания используемой памяти. В разных частях скрипта нагрузки могут быть разные. Для того чтобы получить значение используемой памяти в данный момент, нам следует использовать метод memory_get_usage(). Для фиксации максимального количества используемой памяти используем memory_get_peak_usage()

echo "Initial: ".memory_get_usage()." bytes \n";
/*
Initial: 361400 bytes
*/
 
// дадим небольшую нагрузку
for ($i = 0; $i < 100000; $i++) {
    $array []= md5($i);
}
 
// и ещё
for ($i = 0; $i < 100000; $i++) {
    unset($array[$i]);
}
 
echo "Final: ".memory_get_usage()." bytes \n";
/*
Final: 885912 bytes
*/
 
echo "Peak: ".memory_get_peak_usage()." bytes \n";
/*
Peak: 13687072 bytes
*/

Добавлено: 10 Мая 2018 18:42:34 Добавил: Андрей Ковальчук

Используем Glob() для поиска файлов

Часто названия функций говорят сами за себя. Такого нельзя сказать о функции glob().

Если не вдаваться в подробности, её функциональность схожа с методом scandir(). Она позволяет найти необходимый файл по шаблону:

// найти все php файлы
$files = glob('*.php');
 
print_r($files);
/* выведет:
Array
(
    [0] => phptest.php
    [1] => pi.php
    [2] => post_output.php
    [3] => test.php
)
*/

Для нахождения файлов нескольких типов надо писать так:
// найти все php и txt файлы
$files = glob('*.{php,txt}', GLOB_BRACE);
 
print_r($files);
/* на выходе:
Array
(
    [0] => phptest.php
    [1] => pi.php
    [2] => post_output.php
    [3] => test.php
    [4] => log.txt
    [5] => test.txt
)
*/

Так же можно в шаблоне указать путь:
$files = glob('../images/a*.jpg');
 
print_r($files);
/* на выходе:
Array
(
    [0] => ../images/apple.jpg
    [1] => ../images/art.jpg
)
*/

Для того чтобы получить полный путь к документу используйте метод realpath():
$files = glob('../images/a*.jpg');
 
// Применить функцию 'realpath' к каждому элементу массива
$files = array_map('realpath',$files);
 
print_r($files);
/* выведет:
Array
(
    [0] => C:\wamp\www\images\apple.jpg
    [1] => C:\wamp\www\images\art.jpg
)
*/

Добавлено: 10 Мая 2018 18:41:46 Добавил: Андрей Ковальчук

Создание функций с переменным числом аргументов

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

Но для начала, вспомним как мы создаём функции обычным образом:

// функция с двумя необязательными параметрами
function foo($arg1 = '', $arg2 = '') {
    echo "arg1: $arg1\n";
    echo "arg2: $arg2\n";
 
}
 
foo('hello','world');
/* выведет:
arg1: hello
arg2: world
*/
 
foo();
/* выведет:
arg1:
arg2:
*/

Теперь посмотрим на то, как можно написать функцию с неограниченным количеством аргументов. Для этого будет использовать метод func_get_args():
// не указываем аргументы
function foo() {
 
    // возвращает массив, переданных аргументов
    $args = func_get_args();
 
    foreach ($args as $k => $v) {
        echo "arg".($k+1).": $v\n";
    }
 
}
 
foo();
/* ничего не выведет */
 
foo('hello');
/* выведет
arg1: hello
*/
 
foo('hello', 'world', 'again');
/* выведет
arg1: hello
arg2: world
arg3: again
*/

Добавлено: 10 Мая 2018 18:40:35 Добавил: Андрей Ковальчук

Разбить строку на массив – explode()

Сегодня разберем работу функции разбития строки на массив. То есть – представим что у нас есть строка разделенная запятой (это может быть любой другой символ)

И мы хотим ее разбить на массив функцией explode(), давайте посмотрим, как это можно сделать –

<?php 
$str = 'Ваня,Петя,Гоша,Оля'; 
$StrArr = explode(",",$str); 
?>

Где $str – строка которую нужно разбить, $StrArr массив который мы получаем на выходе.

Спасибо за внимание, надеюсь, помог.

Добавлено: 10 Мая 2018 16:46:16 Добавил: Андрей Ковальчук

Сортировка в php (массивы).

Рассмотрим функции сортировки в php, применяемые к массивам.

ksort (array &array [, int sort_flags]) – сортировка по возрастанию (она же сортировка по алфавиту) элементов массива по ключам, при этом в результирующем массиве сохраняются отношения ключ-значение. Данная функция будет полезна, если нужна сортировка ассоциативного массива.

Пример использования:

<?php
$things = array("d"=>"рубаха", "a"=>"пылесос", "b"=>"тарелка", "c"=>"чашка");
ksort($things);
//теперь сбросим индекс и выведем полученный результат
reset($things);
while (list($key, $val) = each($things)) {
    echo "$key = $val\n";
}
?>

Данная сортировка по ключу даст такой результат:
a = пылесос
b = тарелка
c = чашка
d = рубаха

asort() – сортировка массива по значению с сохранением отношений ключ-значение.
Синтаксис:

asort(array &array [, int sort_flags]);

Рассмотрим пример:
<?php
$names = array("d"=>"Дима", "a"=>"Сергей", "b"=>"Иван", "c"=>"Алексей");
asort($names);
//теперь сбросим индекс и выведем полученный результат
reset($names);
while (list($key, $val) = each($names)) {
    echo "$key = $val\n";
}
?>

Данная сортировка по ключу даст такой результат:
с = Алексей
d = Дима
b = Иван
a = Сергей

sort() – сортировка массива по возрастанию, но без сохранения отношений ключ-значение.

Синтаксис:
sort (array &array [, int sort_flags])

Пример использования:
<?php
$things = array("рубаха","пылесос", "тарелка", "чашка");
sort($things);
reset($things);
while (list($key, $val) = each($things)) {
    echo "things[" . $key . "] = " . $val . "\n";
}
?>

Данная сортировка по возрастанию даст такой результат:
things[0] = пылесос
things[1] = рубаха
things[2] = тарелка
things[3] = чашка

arsort() – Отсортировать массив в обратном порядке, сохраняя ключи.

Синтаксис:
arsort(array &array [, int sort_flags])

Пример использования:
<?php
$names = array("d"=>"Дима", "a"=>"Сергей", "b"=>"Иван", "c"=>"Алексей");
arsort($names);
reset($names);
while (list($key, $val) = each($names)) {
    echo "$key = $val\n";
}
?>

Сортировка массива в обратном порядке даст такой результат:
a = Сергей
b = Иван
d = Дима
c = Алексей

Добавлено: 10 Мая 2018 16:40:23 Добавил: Андрей Ковальчук

Функция htmlspecialchars в PHP

Функция htmlspecialchars() позволяет преобразовать html-теги в специальные сущности. Данная функция используется, главным образом, для преобразования данных, получаемых от пользователя через гостевую книгу, форму обратной связи и т.п.

Синтаксис:

string htmlspecialchars ( string string [, int quote_style [, string charset]] )

Главный и обязательный аргумент для функции – это исходная строка string.

Второй необязательный аргумент quote_style определяет, как должны быть преобразованы кавычки. Его возможные значения:

ENT_COMPAT – оставляет без изменений одиночные кавычки и преобразует двойные кавычки, ENT_QUOTES – будут преобразованы и двойные и одинарные кавычки
ENT_NOQUOTES – любые кавычки остаются без изменений

Если вы не указываете параметр quote_style, то по умолчанию его значение будет соответствовать ENT_COMPAT.

В версии PHP 5.4 также добавлены новые параметры:

ENT_SUBSTITUTE – Заменит некорреткные кодовые последовательности символом замены Юникода U+FFFD в случае использования UTF-8 и &#FFFD; (если используется другая кодировка), вместо возврата пустой строки.
ENT_DISALLOWED – заменяет неверные коды символов символом замены юникода U+FFFD (UTF-8) или &#FFFD (если используется другая кодировка).
ENT_HTML401 – обработает код в соответствии с HTML 4.01.
ENT_XML1 – обработает код в соответствии с XML 1
ENT_XHTML – обработает код в соответствии с XHTML
ENT_HTML5 – обработает код в соответствии с HTML5

В версии 5.3 добавлен параметр ENT_IGNORE (отбросит все некорректные участки кода, вместо возврата пустой строки).

Третий аргумент charset также является необязательным и определяет кодировку, в которой будет происходить преобразование. До версии php 5.4 кодировкой по умолчанию является ISO-8859-1. Начиная с версии 5.4.0 кодировка по умолчанию UTF-8.

Функция htmlspecialchars() преобразует следующие специальные символы:

'&' (амперсанд) преобразуется в '&amp;'
''' (одиночная кавычка) преобразуется в '&#039;' (работает только в режиме ENT_QUOTES).
'"' (двойная кавычка) преобразуется в '&quot;' (будет преобразовано, если не выбран режим ENT_NOQUOTES ).
'>' (знак "больше чем") преобразуется в '&gt;'
'<' (знак "меньше чем") преобразуется в '&lt;'
Рассмотрим примеры:
<?php
$newlink = htmlspecialchars("<a href='somelink'>Link</a>", ENT_QUOTES);
echo $newlink; 
// выведет &lt;a href=&#039;somelink&#039;&gt;Link&lt;/a&gt;
?>

Другой пример:
<?php
$newmessage = htmlspecialchars("<script>alert('ok');</script>", ENT_QUOTES);
echo $newmessage; 
//выведет &lt;script&gt;alert(&#039;ok&#039;);&lt;/script&gt;
?>

Добавлено: 10 Мая 2018 16:37:57 Добавил: Андрей Ковальчук

Функция list() в PHP.

Функция list() в PHP позволяет легко присвоить нескольким переменным значения элементов массива. Все это делается в одной строке:

list($a, $b, $c) = $my_array;

Рассмотрим более детальный пример:
<?php
$my_array = array('Mazda', 'BMW', 'Honda');
list($a, $b, $c) = $my_array;
 
echo $a.'<br>';// выведет  Mazda
echo $b.'<br>';// выведет   BMW
echo $c;// выведет   Honda
?>

Также мы можем брать только избранные элементы массива, пропуская в параметрах функции list() ненужные элементы:
<?php
$my_array = array('Mazda', 'BMW', 'Honda');
list($a, , $c) = $my_array;
?>

Обратите внимание, что мы не просто не указываем второй параметр, а оставляем его место пустым, ставя запятую, как если бы он был.

Так мы напишем наш код, если нам нужен будет только последний элемент:
<?php
$my_array = array('Mazda', 'BMW', 'Honda');
list( , , $c) = $my_array;
?>

Функция list() удобна для обработки значений, получаемых запросом в базу данных. Рассмотрим пример:
<h1>Список пользователей системы</h1>
<?php
//мы уже подключились к базе и имеем ссылку на соединение $conn_link
$result = mysql_query("SELECT id, username, age FROM users", $conn_link);
 
while (list($id, $username, $age) = mysql_fetch_row($result)) {
    echo $id." ".$username." ".$age."<br>";
}
?>

Важное замечание: функция list() присваивает значения, начиная с крайнего правого параметра.

Для вас это будет совершенно незаметным, если вы работаете с обычными переменными. Однако, если в качестве параметров вы указываете элементы другого массива, то элементы в этом массиве будут располагаться в обратной последовательности.
<?php
$a = array();
$my_array = array('Mazda', 'BMW', 'Honda');
list($a[0], $a[1], $a[2]) = $my_array;
 
print_r($a);
?>

В результате выполнения данного кода мы получим массив со следующей структурой:
Array
(
[2] => Honda
[1] => BMW
[0] => Mazda
)

Как видите, порядок элементов стал обратным – от 2 до 0. Однако, проблем при проходе по данному массиву не возникнет, если на каждой итерации вы напрямую указываете индекс элемента, увеличивая его на 1 на каждом шаге, то есть, используя конструкцию for:
<?php
for($i = 0;$i < count($a); $i++){
   echo $a[i].'<br>';
}
?>

Выведет:
Mazda
BMW
Honda

При использовании конструкции foreach без указания индексов элементов, список будет в обратном порядке:
<?php 
foreach($a as $value){
   echo $value.'<br>';
}
?>

Получим:
Honda
BMW
Mazda

Добавлено: 10 Мая 2018 16:34:16 Добавил: Андрей Ковальчук

Функция PHP strlen().

Иногда необходимо получить информацию о длине той или иной строки. Функция PHP strlen() помогает определить количество символов конкретной строки.

Синтаксис функции:

int strlen (string string)

Функция strlen возвращает целое число (тип integer), а в качестве параметра принимает значение строкового типа (string).

Примеры использования:
<?php
$str = 'Привет мир!';
echo strlen($str); // вернет 11
 
$str1 = 'Тест';
echo strlen($str1); // 4
?>

Если строка будет пустой, то функция вернет 0. Функция также учитывает пробелы, считая и их тоже.

Данную функцию нередко используют в циклах при обработке символов строки. Обычно в этих случаях делается перебор символов начиная от 1 до конца строки.

Название функции образовано от сокращений двух слов: string (строка) и length (длина).

Добавлено: 10 Мая 2018 15:28:41 Добавил: Андрей Ковальчук

Функция strpos() в PHP.

Функция strpos() осуществляет поиск заданной строки в другой строке. Возвращает позицию первого вхождения искомой строки, либо FALSE, если подстрока не найдена. При этом отсчет ведется с 0, то есть первый символ занимает нулевую позицию.

Общий синтаксис:

int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

Первый параметр $haystack – это строка, в которой осуществляется поиск. Второй параметр $needle – искомая подстрока. Третий параметр – необязательный и указывает позицию, с которой необходимо осуществлять поиск.

Обратите внимание, что данная функция может возвратить 0, если искомая подстрока находится на нулевой позиции, а это значит, что при проверке возвращаемого значения с помощью «$pos == FALSE» мы получим совсем не то, что нужно, то есть 0 будет преобразован в FALSE. Чтобы избежать ошибки, лучше использовать знак «===», где сравнение используется с учетом типа данных.

Рассмотрим пример:
<?php
$teststr = 'алгоритм';
$search   = 'a';
$pos = strpos($teststr, $search);
 
if ($pos === false) {
    echo "Строка '$search' не найдена в строке '$teststr'";
} else {
    echo "Строка '$search' найдена в строке '$teststr'";
    echo " в позиции $pos";
}
?>

В этом примере мы получим верное значение 0, так как использовали сравнение с учетом типа возвращаемого значения.

Пример 2.
<?php
$teststr = 'мама';
$search   = 'м';
$start = '1';
$pos = strpos($teststr, $search, $start);
 
if ($pos === false) {
    echo "Строка '$search' не найдена в строке '$teststr'";
} else {
    echo "Строка '$search' найдена в строке '$teststr'";
    echo " в позиции $pos";
}
?>

Здесь будет выведено 2, так как поиск ведется с 1 позиции (это второй символ в строке), а искомая подстрока (символ) занимает 0 и 2 позиции.

Название функции strpos() образовано от двух слов string (строка) и position (позиция).

Добавлено: 10 Мая 2018 15:26:40 Добавил: Андрей Ковальчук

Функция для генерации пароля

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

<?php
echo _genpassword(10, array(0,1,2));
 
/*
* $number - количество символов в пароле
* $lit - тип символов. передается массивом array(0,1,2); 0 - маленькие буквы, 1 - большие, 2 - цифры
*/
function _genpassword($number, $lit) {
    // массивы символов
    $array_pass_0 = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'v', 'x', 'y', 'z');
    $array_pass_1 = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'Z');
    $array_pass_2 = array('1', '2', '3', '4', '5', '6', '7', '8', '9', '0');
    $passwd = "";
    for ($rnd = 0; $rnd < $number; $rnd++) {         
        $array_pass = ${'array_pass_'.$lit[mt_rand(0, count($lit)-1)]}; // выбираем случайный массив символов       
        $random_pass = mt_rand(0, count($array_pass) - 1);  // выбираем случайный символ из массива символов        
        $passwd .= $array_pass[$random_pass]; // приписываем к строке пароля один символ    
    }       
    return $passwd; 
} 
?>

Добавлено: 10 Мая 2018 12:30:38 Добавил: Андрей Ковальчук