Полезные функции РНР (1 пост)
1412
Кураторы темы:
Azzido
0
Функция отмечает выделенный вариант формы radio/checkbox/select если переменная "a" равна значению "b"
<?php function check($a,$b,$type='c'){ // с - checkbox // r - radio // s - select if($type == 's'){$text = 'selected="selected"';} else {$text = 'checked="checked"';} return $result = ($a == $b) ? $text : ''; } ?>
Изменил: Azzido (24.01.2020 / 06:30)
0
Переименование файлов при занесение в базу данных и дерикторию соответственно
<?php $dir = "files/photo/"; echo get_id($dir); function get_id($dir) { $number = 0; if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { if(is_file($dir.$file)) { if(preg_match("|^file_([\d]+).jpg$|", $file, $out)) { if($number < $out[1]) $number = $out[1]; } } } closedir($dh); } } return $number + 1; } ?>
0
Шифрование по ключу
(Источник: snippets.pp.ru)
(Источник: snippets.pp.ru)
<?php $phrase = '[color=#00cc00]secret message[/color]'; $key = '[color=#00cc00]key[/color]'; function encrypt($key, $text) { $cipher = mcrypt_module_open(MCRYPT_BLOWFISH,'','cbc',''); mcrypt_generic_init($cipher, $key, '12345678'); $encrypted = mcrypt_generic($cipher,$text); mcrypt_generic_deinit($cipher); $encrypted = bin2hex($encrypted); return $encrypted; } function decrypt($key, $encrypted) { $encrypted = hex2bin($encrypted); $cipher = mcrypt_module_open(MCRYPT_BLOWFISH,'','cbc',''); mcrypt_generic_init($cipher, $key, '12345678'); $decrypted = mdecrypt_generic($cipher,$encrypted); mcrypt_generic_deinit($cipher); return $decrypted; } $encrypt = encrypt($key, $phrase); $phrase = decrypt($key, $encrypt); echo $encrypt, ' = ', $phrase; ?>12345678 это размер блока, его можно задать произвольный, не задавать вообще (0) или сгенерить через mcrypt_enc_get_iv_size
Изменил: Azzido (14.08.2012 / 21:22)
0
Рекурсивное удаление всех файлов и каталогов
<?php function rrmdir($dir) { foreach(glob($dir . '/*') as $file) { if(is_dir($file)) rrmdir($file); else unlink($file); } rmdir($dir); } rrmdir('tmp/dir/cleandir'); ?>
Изменил: Azzido (14.08.2012 / 21:19)
0
Функция определения приоритетного языкового пакета, из заголовков браузера
<?php function LocaleAuto(){ if(!isset($_SESSION['accept_language'])){ preg_match_all('|([a-z\-]+);q=([\d\.]+)|i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $match_lang); $selected = 'ru'; $level = 0; foreach( $match_lang[1] as $n=>$v){ if($match_lang[2][$n] > $level){ $level = $match_lang[2][$n]; $selected = $v; } } $language = explode('-', $selected); $_SESSION['accept_language'] = ($language[0]!='') ? $language[0] : $selected; } return $_SESSION['accept_language']; } echo LocaleAuto(); // ru
Изменил: ramzes (02.12.2014 / 12:52)
Станислав Крунич
08.12.2014 / 13:14
Пришелец
Пришелец
0
<?php /** * findInTree($array, $key, $value) Поиск массива в дереве по ключ=>значение * @param array $array исходный массив * @param string $key ключ * @param string $value значение * @access static * @return array */ public static function findInTree($array, $key, $value, $key2 = null, $value2 = null) { $results = array(); $arrIt = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($array)); foreach ($arrIt as $sub) { $subArray = $arrIt->getSubIterator(); if(!is_null($key2) && !is_null($value2)) { if ($subArray == $value2 && $subArray == $value) { $results = iterator_to_array($subArray); } } else { if ($subArray === $value) { $results = iterator_to_array($subArray); } } } return $results; }
Добавлено через 01:18 сек.
<?php /** * excludeFromTree($array, $key, $value) Исключение из массивов по ключ=>значение * @param array object $array исходный массив * @param string $key ключ * @param string $value значение * @access static * @return array */ public static function excludeFromTree($array, $key, $value) { $results = array(); $arrIt = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($array)); foreach($arrIt as $sub) { $subArray = $arrIt->getSubIterator(); if($subArray[$key] === $value) unset($subArray); else $results[] = iterator_to_array($subArray); } return $results; }
Добавлено через 04:09 сек.
<?php /** * Прицепляем обработчик (функцию) к каждому элементу массива * @param array $array * @param callback $callback * @access static * @return array */ public static function arrayMapDeep($array, $callback) { $new = []; foreach ($array as $key => $val) { if(is_array($val)) $new[$key] = self::arrayMapDeep($val, $callback); else $new[$key] = call_user_func($callback, $val); } return $new; }
Изменил: Станислав Крунич (08.12.2014 / 13:14)
0
Функция определения приоритетного языкового пакета, из заголовков браузера
<?php function getPreferredLanguage($header) { // Получаем список языковых пакетов из заголовка Accept-Language $languages = []; preg_match_all('/([a-z]{1,8}(?:-[a-z]{1,8})?)(?:[^a-z-]|$)/i', $header, $matches); // Формируем массив с приоритетами языковых пакетов foreach ($matches[1] as $language) { $qpos = strpos($language, ';q='); if ($qpos !== false) { $language = substr($language, 0, $qpos); } $languages[] = $language; } // Возвращаем первый языковой пакет с наибольшим приоритетом return reset($languages); } // Пример использования $header = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $preferredLanguage = getPreferredLanguage($header); echo "Приоритетный языковой пакет: " . $preferredLanguage; ?>
Добавлено через 05:24 сек.
Рекурсивное удаление всех файлов и каталогов
<?php function recursiveDelete($path) { // Проверяем, является ли путь директорией if (is_dir($path)) { // Открываем директорию $dirHandle = opendir($path); // Проходим по всем элементам в директории while (($file = readdir($dirHandle)) !== false) { // Пропускаем текущую и родительскую директории if ($file != '.' && $file != '..') { // Формируем полный путь к элементу $filePath = $path . '/' . $file; // Если элемент является директорией, вызываем функцию рекурсивно if (is_dir($filePath)) { recursiveDelete($filePath); } else { // Если элемент является файлом, удаляем его unlink($filePath); } } } // Закрываем директорию closedir($dirHandle); // Удаляем саму директорию rmdir($path); } else { // Если путь указывает на файл, просто его удаляем unlink($path); } } // Пример использования $directoryPath = '/путь/к/директории'; recursiveDelete($directoryPath); ?>
Изменил: Titov (18.07.2023 / 15:50)
0
Рекурсивное удаление всех файлов и каталоговили так
Azzido 23.07.2012 / 20:18
function recursiveDelete($path) { if (is_dir($path)) { array_map('recursiveDelete', glob($path . '/*')) == rmdir($path); } else { unlink($path); } }
+2
Titov, ну да, многие действия можно выполнить разными способами, эта тема была создана больше 10 лет назад, когда форум был оживлённый, и многие интересующиеся PHP часто задавали простейшие вопросы, поэтому сюда собирали некоторые интересные фрагменты когда, чтоб было на что ссылаться в примерах, многие сайтостроением занимались со смартфонов (которые, естественно, были не такие мощные как сейчас), и было трудно находить учебники и простую информацию.
Я, как куратор темы, просто редактировал куски кода, которые сюда кидали другие пользователи (кстати, в старых версиях движка не было возможности у кураторов редактировать чужие посты, только удалять, поэтому тут посты опубликованы от моей учётки, но писали их другие люди).
Я, как куратор темы, просто редактировал куски кода, которые сюда кидали другие пользователи (кстати, в старых версиях движка не было возможности у кураторов редактировать чужие посты, только удалять, поэтому тут посты опубликованы от моей учётки, но писали их другие люди).
Изменил: Azzido (09.11.2023 / 21:46)
Для выполнения действия необходимо авторизоваться!