Полезные функции РНР (1 пост) - Visavi.net
https://visavi.net/
RSS - Visavi.net
https://visavi.net/assets/img/images/logo_small.png
RSS - Visavi.net
https://visavi.net/
[email protected] (admin)
[email protected] (admin)
Fri, 15 Nov 2024 20:20:27 +0300
-
<a href="/users/Titov">Titov</a>, ну да, многие действия можно выполнить разными способами, эта тема была создана больше 10 лет назад, когда форум был оживлённый, и многие интересующиеся PHP часто задавали простейшие вопросы, поэтому сюда собирали некоторые интересные фрагменты когда, чтоб было на что ссылаться в примерах, многие сайтостроением занимались со смартфонов (которые, естественно, были не такие мощные как сейчас), и было трудно находить учебники и простую информацию.<br>
Я, как куратор темы, просто редактировал куски кода, которые сюда кидали другие пользователи (кстати, в старых версиях движка не было возможности у кураторов редактировать чужие посты, только удалять, поэтому тут посты опубликованы от моей учётки, но писали их другие люди).
https://visavi.net/topics/380/713491
Полезные функции РНР (1 пост)
Azzido
Thu, 09 Nov 2023 21:46:08 +0300
Сообщения
https://visavi.net/topics/380/713491
-
<a href="/users/Titov">Titov</a>, и в чем выгода? 9 лет прошло))
https://visavi.net/topics/380/712904
Полезные функции РНР (1 пост)
ramzes
Fri, 21 Jul 2023 12:53:15 +0300
Сообщения
https://visavi.net/topics/380/712904
-
<blockquote class="blockquote">Рекурсивное удаление всех файлов и каталогов<br>
<a href="/users/Azzido">Azzido</a> 23.07.2012 / 20:18</blockquote>
или так<br>
<pre class="prettyprint">function recursiveDelete($path) {
if (is_dir($path)) {
array_map('recursiveDelete', glob($path . '/*')) == rmdir($path);
} else {
unlink($path);
}
}</pre>
https://visavi.net/topics/380/712902
Полезные функции РНР (1 пост)
Titov
Tue, 18 Jul 2023 15:55:37 +0300
Сообщения
https://visavi.net/topics/380/712902
-
<blockquote class="blockquote">Функция определения приоритетного языкового пакета, из заголовков браузера<footer class="blockquote-footer">@ramzes 02.12.2014 / 12:48</footer></blockquote>
<pre class="prettyprint">
<?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;
?></pre>
<br>
<em><span style="font-size:x-small">Добавлено через 05:24 сек.</span></em><br>
<blockquote class="blockquote">Рекурсивное удаление всех файлов и каталогов<footer class="blockquote-footer">@Azzido 23.07.2012 / 20:18</footer></blockquote>
<br>
<pre class="prettyprint"><?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);
?></pre>
https://visavi.net/topics/380/712901
Полезные функции РНР (1 пост)
Titov
Tue, 18 Jul 2023 15:45:36 +0300
Сообщения
https://visavi.net/topics/380/712901
-
<pre class="prettyprint">
<?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;
}</pre>
<br>
<em><span style="font-size:x-small">Добавлено через 01:18 сек.</span></em><br>
<pre class="prettyprint"><?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;
}</pre>
<br>
<em><span style="font-size:x-small">Добавлено через 04:09 сек.</span></em><br>
<pre class="prettyprint"><?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;
}</pre>
https://visavi.net/topics/380/674547
Полезные функции РНР (1 пост)
Станислав Крунич
Mon, 08 Dec 2014 13:14:01 +0300
Сообщения
https://visavi.net/topics/380/674547
-
Функция определения приоритетного языкового пакета, из заголовков браузера<br>
<pre class="prettyprint"><?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
</pre>
https://visavi.net/topics/380/674231
Полезные функции РНР (1 пост)
ramzes
Tue, 02 Dec 2014 12:48:55 +0300
Сообщения
https://visavi.net/topics/380/674231
-
<strong><span style="color:#ff0000">Рекурсивное удаление всех файлов и каталогов</span></strong><br>
<br>
<pre class="prettyprint">
<?php
function rrmdir($dir) {
foreach(glob($dir . '/*') as $file) {
if(is_dir($file))
rrmdir($file);
else
unlink($file);
}
rmdir($dir);
}
rrmdir('tmp/dir/cleandir');
?>
</pre>
https://visavi.net/topics/380/576504
Полезные функции РНР (1 пост)
Azzido
Mon, 23 Jul 2012 20:18:25 +0400
Сообщения
https://visavi.net/topics/380/576504
-
<strong><span style="color:#ff0000">Шифрование по ключу</span></strong><br>
<span style="font-size:x-small">(Источник: <a href="http://snippets.pp.ru" target="_blank" rel="nofollow">snippets.pp.ru</a>)</span><br>
<br>
<pre class="prettyprint">
<?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;
?>
</pre>
12345678 это размер блока, его можно задать произвольный, не задавать вообще (0) или сгенерить через mcrypt_enc_get_iv_size
https://visavi.net/topics/380/575876
Полезные функции РНР (1 пост)
Azzido
Sat, 21 Jul 2012 21:11:02 +0400
Сообщения
https://visavi.net/topics/380/575876
-
Переименование файлов при занесение в базу данных и дерикторию соответственно<br>
<br>
<pre class="prettyprint"><?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;
}
?> </pre>
https://visavi.net/topics/380/478650
Полезные функции РНР (1 пост)
Николай
Wed, 11 Jan 2012 11:38:39 +0400
Сообщения
https://visavi.net/topics/380/478650
-
Функция отмечает выделенный вариант формы radio/checkbox/select если переменная "a" равна значению "b"<br>
<pre class="prettyprint"><?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 : '';
}
?></pre>
https://visavi.net/topics/380/467518
Полезные функции РНР (1 пост)
KOZZ
Fri, 23 Dec 2011 21:57:28 +0400
Сообщения
https://visavi.net/topics/380/467518
-
80. Давай упрощу эту функцию:<br>
<br>
<pre class="prettyprint"><?php
function calc_age($d, $m, $y) {
return date('Y', time()-mktime(0,0,0,$m,$d,$y))-1970;
}
## Вызов:
echo calc_age(13, 6, 1993);
?></pre>
<br>
Ну это для тех, кто моложе 1970 ))
https://visavi.net/topics/380/467203
Полезные функции РНР (1 пост)
halsoft
Fri, 23 Dec 2011 11:07:10 +0400
Сообщения
https://visavi.net/topics/380/467203
-
<strong>Подсчёт возраста по дате рождения</strong><br>
<pre class="prettyprint">
<?php
function calc_age($d, $m, $y)
{
$age = date('Y') - $y;
$_m = date('m');
if($_m < $m || ($_m == $m && date('d') < $d))
$age--;
return $age;
}
## Вызов:
echo calc_age(13, 06, 1993); // Число , Месяц, Год
?>
</pre>
https://visavi.net/topics/380/467123
Полезные функции РНР (1 пост)
3DwEp
Fri, 23 Dec 2011 01:07:00 +0400
Сообщения
https://visavi.net/topics/380/467123
-
функция шифрования пароля<br>
<pre class="prettyprint">
<?php
function crypt_apr1_md5($plainpasswd) {
$salt = substr(str_shuffle("abcdefghijklmnopqrstuvwxyz0123456789"), 0, 8);
$len = strlen($plainpasswd);
$text = $plainpasswd.'$apr1$'.$salt;
$bin = pack("H32", md5($plainpasswd.$salt.$plainpasswd));
for($i = $len; $i > 0; $i -= 16) { $text .= substr($bin, 0, min(16, $i)); }
for($i = $len; $i > 0; $i >>= 1) { $text .= ($i & 1) ? chr(0) : $plainpasswd{0}; }
$bin = pack("H32", md5($text));
for($i = 0; $i < 1000; $i++) {
$new = ($i & 1) ? $plainpasswd : $bin;
if ($i % 3) $new .= $salt;
if ($i % 7) $new .= $plainpasswd;
$new .= ($i & 1) ? $bin : $plainpasswd;
$bin = pack("H32", md5($new));
}
for ($i = 0; $i < 5; $i++) {
$k = $i + 6;
$j = $i + 12;
if ($j == 16) $j = 5;
$tmp = $bin[$i].$bin[$k].$bin[$j].$tmp;
}
$tmp = chr(0).chr(0).$bin[11].$tmp;
$tmp = strtr(strrev(substr(base64_encode($tmp), 2)),
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
return "$"."apr1"."$".$salt."$".$tmp;
}
?>
</pre>
https://visavi.net/topics/380/411723
Полезные функции РНР (1 пост)
Titov
Tue, 23 Aug 2011 15:11:52 +0400
Сообщения
https://visavi.net/topics/380/411723
-
<pre class="prettyprint"><?php
$count = 0;
function countf($dir) {
static $count;
foreach(glob($dir) as $obj) {
if(is_file($obj) and $obj != '.' and $obj != '..') {
$count += 1;
} else {
countf($obj . '/*');
}
}
return $count;
}
echo countf('content');
?>
</pre>
с рекурсивом
https://visavi.net/topics/380/391054
Полезные функции РНР (1 пост)
Владислав
Sun, 10 Jul 2011 23:00:01 +0400
Сообщения
https://visavi.net/topics/380/391054
-
<pre class="prettyprint">
<?php
# защита входных данных (для POST данных, пришедших от юзера)
function check_in($var){
return mysql_real_escape_string(trim(htmlentities($var, ENT_QUOTES, 'UTF-8')));
}
// пример
$_POST = array_map('check_in',$_POST);
$_POST['text'] = check_in($_POST['text']);
# проверка длины строки (от $min символов до $max)
function check_strlen($string,$min,$max){
$a = filter_var(x_strlen($string), FILTER_VALIDATE_INT, array('options'=>array('min_range'=>$min,'max_range'=>$max)));
return ($a !== false) ? true : false;
}
// пример
if(check_strlen($_POST['text'],3,100)){echo 'Строка от 3 до 100 символов включительно';}
# преобразовывает число меньшее нуля в 1
function more_zero($var){
$var = abs(intval($var));
return ($var<=0) ? 1 : $var;
}
# постраничная навигация (использует предыдущую функцию more_zero() )
function navigation($p,$onpage,$count){
$pages = (int) ceil($count / $onpage); # всего страниц
$start = (int) ($p-1) * $onpage; # стартовая позиция
$end = (int) more_zero($p * $onpage); # конечная позиция
return array('start'=>$start,'end'=>$end,'pages'=>$pages);
}
// пример
$page = (isset($_GET['p'])) ? more_zero($_GET['p']) : 1; // текущая страница
$arr = range(0,100); // массив выводимых элементов, могут быть имена файлов, итд итп, в данном случае - цифры от 0 до 100
$arr_onpage = 10; // по 10 штук на страницу
$arr_count = count($arr);
$nav = navigation($page,$arr_onpage,$arr_count);
for($i=$nav['start'];$i<=$nav['end'];$i++){
if(!array_key_exists($i,$arr)){continue;}
echo $arr[$i].'<br />';
}
if($nav['pages']>1){
if($p>1) {echo '<a href="?p=1"><big>&laquo;</big></a> ... <a href="?p='.($p-1).'">Назад</a> ';}
echo '&#8226;';
if($p<$nav['pages']) {echo ' <a href="?p='.($p+1).'">Далее</a> ... <a href="?p='.$nav['pages'].'"><big>&raquo;</big></a>';}
}
?></pre>
https://visavi.net/topics/380/379903
Полезные функции РНР (1 пост)
KOZZ
Sat, 18 Jun 2011 20:15:58 +0400
Сообщения
https://visavi.net/topics/380/379903