Полезные функции РНР (1 пост)

Печать RSS
1517
Кураторы темы:

K

Транклюкаторщик
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)

Лузер PHP
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; 
  } 
?> 
A

Оранжевые штаны
0
Шифрование по ключу
(Источник: 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)
A

Оранжевые штаны
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)

2000 лет д.н.э.
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)

Пришелец
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
Функция определения приоритетного языкового пакета, из заголовков браузера
@ramzes 02.12.2014 / 12:48
<?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 сек.
Рекурсивное удаление всех файлов и каталогов
@Azzido 23.07.2012 / 20:18

<?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);
    }
}

2000 лет д.н.э.
0
Titov, и в чем выгода? 9 лет прошло))
A

Оранжевые штаны
+2
Titov, ну да, многие действия можно выполнить разными способами, эта тема была создана больше 10 лет назад, когда форум был оживлённый, и многие интересующиеся PHP часто задавали простейшие вопросы, поэтому сюда собирали некоторые интересные фрагменты когда, чтоб было на что ссылаться в примерах, многие сайтостроением занимались со смартфонов (которые, естественно, были не такие мощные как сейчас), и было трудно находить учебники и простую информацию.
Я, как куратор темы, просто редактировал куски кода, которые сюда кидали другие пользователи (кстати, в старых версиях движка не было возможности у кураторов редактировать чужие посты, только удалять, поэтому тут посты опубликованы от моей учётки, но писали их другие люди).
Изменил: Azzido (09.11.2023 / 21:46)
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск