Полезные функции РНР (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(&#039;recursiveDelete&#039;, glob($path . &#039;/*&#039;)) == 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"> &lt;?php function getPreferredLanguage($header) { // Получаем список языковых пакетов из заголовка Accept-Language $languages = &#91;]; preg_match_all(&#039;/(&#91;a-z]{1,8}(?&#58;-&#91;a-z]{1,8})?)(?&#58;&#91;^a-z-]|$)/i&#039;, $header, $matches); // Формируем массив с приоритетами языковых пакетов foreach ($matches&#91;1] as $language) { $qpos = strpos($language, &#039;;q=&#039;); if ($qpos !== false) { $language = substr($language, 0, $qpos); } $languages&#91;] = $language; } // Возвращаем первый языковой пакет с наибольшим приоритетом return reset($languages); } // Пример использования $header = $_SERVER&#91;&#039;HTTP_ACCEPT_LANGUAGE&#039;]; $preferredLanguage = getPreferredLanguage($header); echo &quot;Приоритетный языковой пакет&#58; &quot; . $preferredLanguage; ?&gt;</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">&lt;?php function recursiveDelete($path) { // Проверяем, является ли путь директорией if (is_dir($path)) { // Открываем директорию $dirHandle = opendir($path); // Проходим по всем элементам в директории while (($file = readdir($dirHandle)) !== false) { // Пропускаем текущую и родительскую директории if ($file != &#039;.&#039; &amp;&amp; $file != &#039;..&#039;) { // Формируем полный путь к элементу $filePath = $path . &#039;/&#039; . $file; // Если элемент является директорией, вызываем функцию рекурсивно if (is_dir($filePath)) { recursiveDelete($filePath); } else { // Если элемент является файлом, удаляем его unlink($filePath); } } } // Закрываем директорию closedir($dirHandle); // Удаляем саму директорию rmdir($path); } else { // Если путь указывает на файл, просто его удаляем unlink($path); } } // Пример использования $directoryPath = &#039;/путь/к/директории&#039;; recursiveDelete($directoryPath); ?&gt;</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"> &lt;?php /** * findInTree($array, $key, $value) Поиск массива в дереве по ключ=&gt;значение * &#64;param array $array исходный массив * &#64;param string $key ключ * &#64;param string $value значение * &#64;access static * &#64;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-&gt;getSubIterator(); if(!is_null($key2) &amp;&amp; !is_null($value2)) { if ($subArray == $value2 &amp;&amp; $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">&lt;?php /** * excludeFromTree($array, $key, $value) Исключение из массивов по ключ=&gt;значение * &#64;param array object $array исходный массив * &#64;param string $key ключ * &#64;param string $value значение * &#64;access static * &#64;return array */ public static function excludeFromTree($array, $key, $value) { $results = array(); $arrIt = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($array)); foreach($arrIt as $sub) { $subArray = $arrIt-&gt;getSubIterator(); if($subArray&#91;$key] === $value) unset($subArray); else $results&#91;] = iterator_to_array($subArray); } return $results; }</pre> <br> <em><span style="font-size:x-small">Добавлено через 04:09 сек.</span></em><br> <pre class="prettyprint">&lt;?php /** * Прицепляем обработчик (функцию) к каждому элементу массива * &#64;param array $array * &#64;param callback $callback * &#64;access static * &#64;return array */ public static function arrayMapDeep($array, $callback) { $new = &#91;]; foreach ($array as $key =&gt; $val) { if(is_array($val)) $new&#91;$key] = self&#58;&#58;arrayMapDeep($val, $callback); else $new&#91;$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">&lt;?php function LocaleAuto(){ if(!isset($_SESSION&#91;&#039;accept_language&#039;])){ preg_match_all(&#039;|(&#91;a-z\-]+);q=(&#91;\d\.]+)|i&#039;, $_SERVER&#91;&#039;HTTP_ACCEPT_LANGUAGE&#039;], $match_lang); $selected = &#039;ru&#039;; $level = 0; foreach( $match_lang&#91;1] as $n=&gt;$v){ if($match_lang&#91;2]&#91;$n] &gt; $level){ $level = $match_lang&#91;2]&#91;$n]; $selected = $v; } } $language = explode(&#039;-&#039;, $selected); $_SESSION&#91;&#039;accept_language&#039;] = ($language&#91;0]!=&#039;&#039;) ? $language&#91;0] &#58; $selected; } return $_SESSION&#91;&#039;accept_language&#039;]; } 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"> &lt;?php function rrmdir($dir) { foreach(glob($dir . &#039;/*&#039;) as $file) { if(is_dir($file)) rrmdir($file); else unlink($file); } rmdir($dir); } rrmdir(&#039;tmp/dir/cleandir&#039;); ?&gt; </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"> &lt;?php $phrase = &#039;&#91;color=#00cc00]secret message&#91;/color]&#039;; $key = &#039;&#91;color=#00cc00]key&#91;/color]&#039;; function encrypt($key, $text) { $cipher = mcrypt_module_open(MCRYPT_BLOWFISH,&#039;&#039;,&#039;cbc&#039;,&#039;&#039;); mcrypt_generic_init($cipher, $key, &#039;12345678&#039;); $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,&#039;&#039;,&#039;cbc&#039;,&#039;&#039;); mcrypt_generic_init($cipher, $key, &#039;12345678&#039;); $decrypted = mdecrypt_generic($cipher,$encrypted); mcrypt_generic_deinit($cipher); return $decrypted; } $encrypt = encrypt($key, $phrase); $phrase = decrypt($key, $encrypt); echo $encrypt, &#039; = &#039;, $phrase; ?&gt; </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">&lt;?php $dir = &quot;files/photo/&quot;; 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(&quot;|^file_(&#91;\d]+).jpg$|&quot;, $file, $out)) { if($number &lt; $out&#91;1]) $number = $out&#91;1]; } } } closedir($dh); } } return $number + 1; } ?&gt; </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 если переменная &quot;a&quot; равна значению &quot;b&quot;<br> <pre class="prettyprint">&lt;?php function check($a,$b,$type=&#039;c&#039;){ // с - checkbox // r - radio // s - select if($type == &#039;s&#039;){$text = &#039;selected=&quot;selected&quot;&#039;;} else {$text = &#039;checked=&quot;checked&quot;&#039;;} return $result = ($a == $b) ? $text &#58; &#039;&#039;; } ?&gt;</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">&lt;?php function calc_age($d, $m, $y) { return date(&#039;Y&#039;, time()-mktime(0,0,0,$m,$d,$y))-1970; } ## Вызов&#58; echo calc_age(13, 6, 1993); ?&gt;</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"> &lt;?php function calc_age($d, $m, $y) { $age = date(&#039;Y&#039;) - $y; $_m = date(&#039;m&#039;); if($_m &lt; $m || ($_m == $m &amp;&amp; date(&#039;d&#039;) &lt; $d)) $age--; return $age; } ## Вызов&#58; echo calc_age(13, 06, 1993); // Число , Месяц, Год ?&gt; </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"> &lt;?php function crypt_apr1_md5($plainpasswd) { $salt = substr(str_shuffle(&quot;abcdefghijklmnopqrstuvwxyz0123456789&quot;), 0, 8); $len = strlen($plainpasswd); $text = $plainpasswd.&#039;$apr1$&#039;.$salt; $bin = pack(&quot;H32&quot;, md5($plainpasswd.$salt.$plainpasswd)); for($i = $len; $i &gt; 0; $i -= 16) { $text .= substr($bin, 0, min(16, $i)); } for($i = $len; $i &gt; 0; $i &gt;&gt;= 1) { $text .= ($i &amp; 1) ? chr(0) &#58; $plainpasswd{0}; } $bin = pack(&quot;H32&quot;, md5($text)); for($i = 0; $i &lt; 1000; $i++) { $new = ($i &amp; 1) ? $plainpasswd &#58; $bin; if ($i % 3) $new .= $salt; if ($i % 7) $new .= $plainpasswd; $new .= ($i &amp; 1) ? $bin &#58; $plainpasswd; $bin = pack(&quot;H32&quot;, md5($new)); } for ($i = 0; $i &lt; 5; $i++) { $k = $i + 6; $j = $i + 12; if ($j == 16) $j = 5; $tmp = $bin&#91;$i].$bin&#91;$k].$bin&#91;$j].$tmp; } $tmp = chr(0).chr(0).$bin&#91;11].$tmp; $tmp = strtr(strrev(substr(base64_encode($tmp), 2)), &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/&quot;, &quot;./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&quot;); return &quot;$&quot;.&quot;apr1&quot;.&quot;$&quot;.$salt.&quot;$&quot;.$tmp; } ?&gt; </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">&lt;?php $count = 0; function countf($dir) { static $count; foreach(glob($dir) as $obj) { if(is_file($obj) and $obj != &#039;.&#039; and $obj != &#039;..&#039;) { $count += 1; } else { countf($obj . &#039;/*&#039;); } } return $count; } echo countf(&#039;content&#039;); ?&gt; </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"> &lt;?php # защита входных данных (для POST данных, пришедших от юзера) function check_in($var){ return mysql_real_escape_string(trim(htmlentities($var, ENT_QUOTES, &#039;UTF-8&#039;))); } // пример $_POST = array_map(&#039;check_in&#039;,$_POST); $_POST&#91;&#039;text&#039;] = check_in($_POST&#91;&#039;text&#039;]); # проверка длины строки (от $min символов до $max) function check_strlen($string,$min,$max){ $a = filter_var(x_strlen($string), FILTER_VALIDATE_INT, array(&#039;options&#039;=&gt;array(&#039;min_range&#039;=&gt;$min,&#039;max_range&#039;=&gt;$max))); return ($a !== false) ? true &#58; false; } // пример if(check_strlen($_POST&#91;&#039;text&#039;],3,100)){echo &#039;Строка от 3 до 100 символов включительно&#039;;} # преобразовывает число меньшее нуля в 1 function more_zero($var){ $var = abs(intval($var)); return ($var&lt;=0) ? 1 &#58; $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(&#039;start&#039;=&gt;$start,&#039;end&#039;=&gt;$end,&#039;pages&#039;=&gt;$pages); } // пример $page = (isset($_GET&#91;&#039;p&#039;])) ? more_zero($_GET&#91;&#039;p&#039;]) &#58; 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&#91;&#039;start&#039;];$i&lt;=$nav&#91;&#039;end&#039;];$i++){ if(!array_key_exists($i,$arr)){continue;} echo $arr&#91;$i].&#039;&lt;br /&gt;&#039;; } if($nav&#91;&#039;pages&#039;]&gt;1){ if($p&gt;1) {echo &#039;&lt;a href=&quot;?p=1&quot;&gt;&lt;big&gt;&amp;laquo;&lt;/big&gt;&lt;/a&gt; ... &lt;a href=&quot;?p=&#039;.($p-1).&#039;&quot;&gt;Назад&lt;/a&gt; &#039;;} echo &#039;&amp;#8226;&#039;; if($p&lt;$nav&#91;&#039;pages&#039;]) {echo &#039; &lt;a href=&quot;?p=&#039;.($p+1).&#039;&quot;&gt;Далее&lt;/a&gt; ... &lt;a href=&quot;?p=&#039;.$nav&#91;&#039;pages&#039;].&#039;&quot;&gt;&lt;big&gt;&amp;raquo;&lt;/big&gt;&lt;/a&gt;&#039;;} } ?&gt;</pre> https://visavi.net/topics/380/379903 Полезные функции РНР (1 пост) KOZZ Sat, 18 Jun 2011 20:15:58 +0400 Сообщения https://visavi.net/topics/380/379903