Полезные функции РНР (1 пост)
1.
Роман (18.02.2008 / 12:18)
В данной теме предлагаю выкладывать именно полезные куски кода, которые в последствии юзеры смогут просто скопировать и вставить в свои скрипты и не создавать повторяющихся тем, вопросы в которых уже не раз обсуждались на форуме.
Уважаемые пользователи!
Просим вас вставлять код исключительно с тегами
[code]
Внимание! Вопросы в этой теме запрещены!
2.
Роман (22.02.2008 / 16:41)
Функция сортировки файлов в директории по времени добавления:
<?php
function sort_files($dir)
{
$d = dir($dir);
while ($f = readdir($d)) {
if ($f != '.' && $f != '..') {
if (is_dir($dir . '/' . $f))
$arr += sort_files($dir . '/' . $f);
else {
$t = filemtime($dir . '/' . $f);
$arr[$t] = $f;
}
}
}
close($d);
krsort($arr);
return $arr;
}
?>
Функция в результате выдаст массив с именами файлов в порядке "новые вверху".
3.
Tony V (26.02.2008 / 13:54)
Функция вывода приветствия на сайте:
<?php
function greeting($_lang = "ru", $_offset = "")
{
$lang = array(
'ru' => array(
'morning' => 'Доброе утро!',
'afternoon' => 'Добрый день!',
'evening' => 'Добрый вечер!',
'night' => 'Доброй ночи!'
),
'en' => array(
'morning' => 'Good morning!',
'afternoon' => 'Good afternoon!',
'evening' => 'Good evening!',
'night' => 'Good night!'
)
);
if (empty($_offset)) {
// Если время на Вашем сервере отличается от Вашего, поменяйте сдвиг в переменной $offset
$_offset = 0;
}
if (empty($_lang)) {
// язык по умолчанию
$_lang = 'ru';
}
// $curr_hour = текущий час
$curr_hour = date('G', time() + (60 * 60 * $_offset));
if ($curr_hour >= "5" && $curr_hour <= "11") {
// если текущий час больше 5 и менее 11
return $lang[$_lang]['morning'];
} elseif ($curr_hour >= "12" && $curr_hour <= "17") {
// если текущий час больше 12 и менее 17
return $lang[$_lang]['afternoon'];
} elseif ($curr_hour >= "18" && $curr_hour <= "20") {
// если текущий час больше 18 и менее 20
return $lang[$_lang]['evening'];
} else {
// все другие случаи
return $lang[$_lang]['night'];
}
}
?>
<?php
// Выводим результат
echo greeting();
?>
4.
Tony V (03.03.2008 / 11:18)
Функция показа расширения файла заданного в параметре
<?php
function pathinfo_utf($path, $options="") {
if(strpos($path, '/') !== false){
$basename = end(explode('/', $path));
}elseif(strpos($path, '\\') !== false){
$basename = end(explode('\\', $path));
}else{
return(false);
}
if(empty($basename)) {
return(false);
}
$dirname = substr($path, 0, strlen($path) - strlen($basename) - 1);
if (strpos($basename, '.') !== false)
{
$extension = end(explode('.', $path));
$filename = substr($basename, 0, strlen($basename) - strlen($extension) - 1);
}
else
{
$extension = '';
$filename = $basename;
}
switch($options){
case PATHINFO_DIRNAME:
return($dirname);
break;
case PATHINFO_BASENAME:
return($basename);
break;
case PATHINFO_EXTENSION:
return($extension);
break;
case PATHINFO_FILENAME:
return($filename);
break;
default:
return(
array(
'dirname' => $dirname,
'basename' => $basename,
'extension' => $extension,
'filename' => $filename
));
break;
}
}
function extension($file){
if(function_exists('pathinfo_utf')){
$ext = pathinfo_utf($file, PATHINFO_EXTENSION);
}else{
$ext = pathinfo($file, PATHINFO_EXTENSION);
}
$ext = strtolower($ext);
return($ext);
}
?>
Пример работы:
<?php
$fileext=extension("file.exe"); // $fileext равно exe
$fileext=extension("FILE.sub.ExE"); // $fileext равно exe
?>
5.
Павел (13.03.2008 / 18:34)
Функция вывода случайного пароля
<?php
function genPass($size)
{
$letter = 'qwertyuipasdfghjklzxcvbnm';
$letter .= strtoupper($letter);
$letter .= '123456789';
mt_srand((double)microtime()*1000000);
$pass = "";
for ($i = 0; $i < $size; $i++)
$pass .= $letter[mt_rand(0, strlen($letter)-1)];
return $pass;
}
?>
6.
Удаленный (15.05.2008 / 17:06)
<?php
/* рекурсивная функция спускается по каталогу
и переименовывает файлы с расширениемя из $ext_arr по маске 001.расширение ..
писал по просьбе знакомого,может кому пригодится )
*/
function my_rename($dirname)
{
$ext_arr = array('jpeg', 'jpg', 'gif');
$dir = opendir($dirname);
$count = 1;
while (($file = readdir($dir)) !== false) {
if (is_file($dirname . '/' . $file)) {
$info = pathinfo($dirname . '/' . $file);
if (in_array(strtolower($info['extension']), $ext_arr)) {
rename($dirname . '/' . $file, $dirname . '/' . str_pad($count, 3, '0', STR_PAD_LEFT) . '.' . strtolower($info['extension']));
$count ++ ;
}
} elseif (is_dir($dirname . '/' . $file) && $file != '.' && $file != '..')my_rename($dirname . '/' . $file);
}
closedir($dir);
}
# пример использования
$dir = 'papka';
my_rename($dir);
?>
7.
Удаленный (28.03.2009 / 20:02)
получение русск языч варианта окончания new
<?php
/**
* @desc Функция получения русскоязычного варианта окончания для переданного числа
* @param float $value Число, для которого надо подобрать окончание
* @param array $names Массив имён вида [0]имя одного; [1]имя от 2 до 4; [2]имя 0 и от 5 до 20
* @return string Возвращает соответствующее числу слово
*/
function getNumberWord($value,$names){
$temp = strval($value);
$temp = $temp[strlen($temp)-1];
return (($temp>1 and $temp <5 and (intval($value)>19 or intval($value)<10))?$names[1]:($temp==1?$names[0]:$names[2]));
}
// Пример работы
$old = '21;
echo 'Мне '.$old.' '.getNumberWord($old,array("год","года","лет"));
?>
8.
Удаленный (28.03.2009 / 20:05)
ф-ия проверки пароля на безопастность
/*
Задача:
Написать функцию проверки пароля на безопасность
* длина не меньше 6 символов
* должен содержать и символы и числа
* не должен содержать больше (>=) 3 линейно расположенных на клавиатуре символов или цифр, например таких как "lkj" или "cvb"
* если пароль безопасен — вернуть истину, нет — ложь
*/
function isGood ($pass)
{
$kbStrings = array('1234567890','qwertyuiop','asdfghjkl','zxcvbnm',
'0987654321','poiuytrewq','lkjhgfdsa','mnbvcxz');
$isGood = false;
if (strlen($pass) >= 6) {
if (preg_match('/[a-z]/i',$pass) && preg_match('/[0-9]/',$pass)) {
$count = strlen($pass) - 2;
$isGood = true;
} else {
$isGood = false;
break 2;
}
}
}
}
}
return $isGood;
}
9.
Артур (23.11.2009 / 19:12)
<?php
class Smiles
{
private $data = array();
private $pack = 'default';
public function __construct($pack)
{
$q = mysql_query('SELECT `name`, `file` FROM `smiles` WHERE `pack` = "'.$pack.'"');
while($i = mysql_fetch_assoc($q))
$this->data[$i['name']] = $i['file'];
$this->pack = $pack;
}
public function replace($text)
{
foreach($this->data as $key=>$val)
$text = str_replace($key, '<img src="/smiles/'.$this->pack.'/'.$val.'"/>', $text);
return $text;
}
}
Это пародия на предыдущую ф-ю, только на ООП. Не тестил, не знаю будет ли работать но вроде всё правильно
если что - по голове сильно не бить
Таблица с полями name, file, pack
name - смайл
file - путь к смайлу, аля smile.png
pack - пак смайлов.
Использование
$smiles = new Smiles($smilepack);
$text = $smiles->replace($text);
10.
Titov (29.12.2009 / 01:31)
Ф-я удаления файлов через определенное время из директории
<?
function old($papka,$times){
$old_time = time()-60*$times;
$dir = opendir ($papka);
while ($file = readdir ($dir)) {
if (( $file != ".") && ($file != ".."))
$files[]="$papka/$file";
$time[]=filemtime("$papka/$file" );
}
closedir ($dir);
$count_files = count($files);
for($i = 1; $i< $count_files; $i++){
if($time[$i] <= $old_time){
@unlink($files[$i]);
}
}
}
?>
далее
<?
old('papka',30);//// будет удалять файлы которые лежат на севрере больше 30 минут, papka наша директория с файлами
?>
проверял вроде все правильно теперь, можно использовать например для чистки кеша на сайте автоматически или удалять какието временные файлы которые через некоторое время не нужны на сервере.
11.
chiper (30.12.2009 / 23:04)
Функция считает размер базы данных
<?php
function formatfilesize( $data ) {
if( $data < 1024 ) {
return $data . " bytes";
}else if( $data < 1024000 ) {
return round( ( $data / 1024 ), 1 ) . " KB";
}
else {
return round( ( $data / 1024000 ), 1 ) . " MB";}
}
$db = mysql_connect ("localhost","user","pass");
mysql_select_db("dbname",$db);
$result = mysql_query( "SHOW TABLE STATUS" );
$dbsize = 0;
while( $row = mysql_fetch_array( $result ) ) {
$dbsize += $row[ "Data_length" ] + $row[ "Index_length" ];
}
echo "Размер базы данных составляет " . formatfilesize( $dbsize );
?>
12.
Удаленный (06.02.2010 / 06:58)
Функция изменяет размер изображения,
<?php
%40return boolean */
function img_resize($src, $out, $width, $height, $color = 0xFFFFFF, $quality = 100)
{
// Если файл не существует
if (!file_exists($src)) {
return false;
}
$size = getimagesize($src);
$format = strtolower(substr($size['mime'], strpos($size['mime'], '/') + 1));
$picfunc = 'imagecreatefrom'.$format;
$gor = $width / $size[0];
// Вертикальное соотношение
$ver = $height / $size[1];
// Если не задана высота, вычислить изходя из ширины, пропорционально
if ($height == 0) {
$ver = $gor;
$height = $ver * $size[1];
}
// Так же если не задана ширина
elseif ($width == 0) {
$gor = $ver;
$width = $gor * $size[0];}
// Формируем размер изображения
$ratio = min($gor, $ver);
// Нужно ли пропорциональное преобразование
if ($gor == $ratio)
$use_gor = true;
else
$use_gor = false
$new_width = $use_gor ? $width : floor($size[0] * $ratio);
$new_height = !$use_gor ? $height : floor($size[1] * $ratio);
$new_left = $use_gor ? 0 : floor(($width - $new_width) / 2);
$new_top = !$use_gor ? 0 : floor(($height - $new_height) / 2);
$picsrc = $picfunc($src);
// Создание изображения в памяти
$picout = imagecreatetruecolor($width, $height);
// Заполнение цветом
imagefill($picout, 0, 0, $color);
// Нанесение старого на новое
imagecopyresampled($picout, $picsrc, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]);
// Создание файла изображения
imagejpeg($picout, $out, $quality);
// Очистка памяти
imagedestroy($picsrc);
imagedestroy($picout);
return true;
}
?>
13.
Azzido (13.04.2010 / 13:18)
Тема существует давно, я вот сейчас все перечитал и заметил что посты некоторые перепутаны номерами, например писал функцию сжатия в четыре поста и эти посты раскиданы теперь друг от друга.
Вот еще несколько полезных функций.
Вставляем новые данные на 5 строку, а саму 5 строку передвигаем на 6:
<?php
$file='base.txt';//файл, в которой добавляем нужную нам строку
$line=5;//строка, на которую вставляем новые данные
$data='новая строка';//данные новой строки
$array=file($file);
$open=fopen($file,'w');
while(list($num,$string)=each($array))
{
if(($num+1)==$line) fwrite($open,$data."\r\n");
fwrite($open,$string);
}
fclose($open);
?>
14.
Azzido (13.04.2010 / 13:31)
Определяем в какой стране живёт посетитель:
<?php
$host=gethostbyaddr($_SERVER['REMOTE_ADDR']);
$countrys=array(
ru => Россия,
ua => Украина,
kz => Казахстан
);
$array=array_reverse(explode('.',$host));
if(isset($countrys[$array[0]])){
echo 'Ваша страна: '.$countrys[$array[0]];
}else{
echo 'Откуда Вы пришли - я не знаю :( ';
?>
15.
Tony V (30.04.2010 / 03:00)
Быстрое меню для навигации по сайту
В современных браузерах редирект происходит автоматически после того, как выбран элемент.
В браузерах не поддерживающих JS будет показываться кнопка для выбора.
<?php
// Если переменная gotourl не пуста, перенаправляем
if(!empty($_REQUEST['gotourl'])){
// Если заголовки уже отправлены, выводим ссылку
if(headers_sent() == FALSE){
// Выдаём заголовки, указывающие браузеру о перенаправлении на другую страницу
header('HTTP/1.1 301 Moved Permanently');
header('Location: '.$_REQUEST['gotourl']);
}
// Выходим
exit('Переход на сайт <a href="'.urlencode($_REQUEST['gotourl']).'">'.$_REQUEST['gotourl'].'</a>');
}else{
// Ну а если пуста, выводим список ссылок
?>
<form action="redirect.php" method="GET">
<select name="gotourl" size="1" onChange="this.form.submit();">
<option value="" disabled="disabled" selected="selected">Куда прикажете отправиться?</option>
<option value="http://visavi.net/">visavi.net</option>
<option value="http://m.habrahabr.ru/">habrahabr.ru</option>
<option value="http://bighack.net/">bighack.net</option>
<option value="http://fakoymozg.ru/">fakoymozg.ru</option>
<option value="http://ссылка/">название</option>
</select>
<noscript>
<input type="submit" value="Выбрать" />
</noscript>
</form>
<?php
}
?>
P.S. Скрипт сохраните как redirect.php и подключайте через include
16.
smartvbxos7 (14.06.2010 / 01:20)
<?php
// Преобразователь из цельсия в фарингейт и обратно, SmartMan.
class convert {
private $degree;
public function __construct($degree) {
$this->degree = $degree;
}
public function c2f(){
return ($this->degree * 1.8) + 32;
}
public function f2c(){
return ($this->degree - 32) / 1.8;
}
}
// Из цельсия в фарингейт
$c2f = new convert(100);
echo $c2f->c2f().'<br />'; // 212
// Из фарингейта в цельсий
$f2c = new convert(212);
echo $f2c->f2c(); // 100
?>
17.
iNeeXT (14.07.2010 / 14:52)
<?php
//Вот функция для получения ip адреса даже если пользователь использует прокси сервер
function getip() {
if(getenv("HTTP_CLIENT_IP")) {
$ip = getenv("HTTP_CLIENT_IP");
} elseif(getenv("HTTP_X_FORWARDED_FOR")) {
$ip = getenv("HTTP_X_FORWARDED_FOR");
} else {
$ip = getenv("REMOTE_ADDR");
}
$ip = htmlspecialchars(substr($ip,0,15), ENT_QUOTES);
return $ip;
}
?>
18.
iNeeXT (14.07.2010 / 14:55)
<?php
//проверка есть ли сайт в яндексе
//by Signum
function in_ya($who)
{
$text=file_get_contents('http://yandex.ru/yandsearch?text='.$who); $url=explode('.',$who);
if(preg_match('/<b>'.$url[0].'<\/b>.<b>'.$url[1].'<\/b>/i', $text))
return 'Сайт '.$who.' есть в яндексе';
else
return 'Сайтa '.$who.' нет в яндексе';
}
//Юзать так:
//echo in_ya('visavi.net');
?>
19.
Azzido (14.07.2010 / 15:36)
Функция определения ip-адреса:
<?php
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) and filter_var(strtok(@$_SERVER['HTTP_X_FORWARDED_FOR'],','),FILTER_VALIDATE_IP,FILTER_FLAG_IPV4)!==FALSE){
$ip=strtok($_SERVER['HTTP_X_FORWARDED_FOR'],',');
}
elseif(isset($_SERVER['GEOIP_ADDR']) and filter_var(@$_SERVER['GEOIP_ADDR'],FILTER_VALIDATE_IP,FILTER_FLAG_IPV4)!==FALSE){
$ip=$_SERVER['GEOIP_ADDR'];
}
elseif(isset($_SERVER['HTTP_X_REAL_IP']) and filter_var(@$_SERVER['HTTP_X_REAL_IP'],FILTER_VALIDATE_IP,FILTER_FLAG_IPV4)!==FALSE){
$ip=$_SERVER['HTTP_X_REAL_IP'];
}
elseif(isset($_SERVER['HTTP_CLIENT_IP']) and filter_var(@$_SERVER['HTTP_CLIENT_IP'],FILTER_VALIDATE_IP,FILTER_FLAG_IPV4)!==FALSE){
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif(isset($_SERVER['REMOTE_ADDR']) and filter_var(@$_SERVER['REMOTE_ADDR'],FILTER_VALIDATE_IP,FILTER_FLAG_IPV4)!==FALSE){
$ip=$_SERVER['REMOTE_ADDR'];
}else{
$ip='0.0.0.0';
}
?>
20.
Neformat (18.07.2010 / 12:00)
<?php
// получаем продолжительность и размеры видео (используем ffmpeg)
$movie = new ffmpeg_movie("/www/1.avi");
echo "Продолжительность фильма: ";
// так как мы получаем секунды надо нам их перевести в человечный вид ЧЧ:ММ:CC
// для этого мы и используем функцию gmdate я думаю фильмов длиной по несколько дней у вас нет =)
echo "<b>".gmdate("H:i:s",$movie->getDuration())."</b><br />";
// теперь выведем размерв нашего фильма
echo "Размеры фильма: ";
echo "<b>".$movie->getFrameWidth()." x ".$movie->getFrameHeight()."</b>";
?>
21.
Neformat (18.07.2010 / 12:02)
<?php
//получаем скриншот с видео (используем ffmpeg)
// путь до файла
$file = "/www/1.avi";
// кадр который будем выхватывать
$frame = 150;
// получаем кадр
$movie = new ffmpeg_movie($file);
$image = $movie->getFrame($frame);
$show_img = $image->toGDImage();
// выводим его
header("Content-type: image/jpeg");
imagejpeg($show_img);
imagedestroy($show_img);
?>
22.
Neformat (18.07.2010 / 12:03)
<?php
// получаем скриншот и уменьшаем его (используем ffmpeg)
// путь до файла
$file = "/www/1.avi";
// кадр который будем выхватывать
$frame = 150;
// максимальный размер по высоте
$max_width = 150;
// получаем кадр в gd
$movie = new ffmpeg_movie($file);
$image = $movie->getFrame($frame);
$show_img = $image->toGDImage();
// редактируем то что в gd
$new_image = new ffmpeg_frame($show_img);
//вычисляем старые значения ширины и высоты
$old_width = $new_image->getWidth();
$old_heighgt = $new_image->getHeight();
// соотношение сторон
$mov_ratio = $old_width/$old_heighgt;
if($old_width > $max_width){
$new_width = $max_width;
}
// задаём новые параметры
$new_height = $new_width / $mov_ratio;
// изменяем размер
$new_image->resize($new_width, $new_height);
$new_show_img = $new_image->toGDImage();
// выводим его
header("Content-type: image/jpeg");
imagejpeg($new_show_img);
imagedestroy($new_show_img);
?>
23.
Neformat (18.07.2010 / 12:04)
<?php
// создаём анимированый .gif (используем ffmpeg)
// путь до файла
$file = "/www/1.avi";
// поехали =)
$movie = new ffmpeg_movie($file);
// создаём анимацию
$gif=new ffmpeg_animated_gif("/www/primer.gif",100 ,100 ,24);
for ($frame = 150; $frame <= 200; $frame++) {
$image = $movie->getFrame($frame);
$gif->addFrame($image);
}
?>
24.
chiper (21.07.2010 / 12:53)
Регуляртное выражение проверки E-mail адресов
<?php
$mail = 'ChipeR@s60-club.net';
if (!preg_match('/^[a-zA-Z0-9-._]{3,25}@[a-zA-Z0-9-]{2,25}.[a-zA-Z]{2,4}$/',$mail)){
echo '<b><font color=red>Формат не верный!</font></b>';
}else{
echo '<b><font color=green>Формат верный!</font></b>';
}
Регуляртное выражение для создания BB кода ICQ
<?php
$text = '[icq:7017970]';
echo preg_replace('#\[icq:( .*?[0-9]{5,9})\]#si','<img src="http://web.icq.com/whritepages/online?icq=\1&img=5" alt="ICQ" />ICQ: \1',$text);
?>
25.
KOZZ (28.07.2010 / 08:18)
Функция замены строк в файле. Делал для себя,решил поделиться со всеми:
<?
function replace($from,$to,$str,$file) {
# $from - заменяемый текст
# $to - текст на который заменяем
# $str - строка в которой производим замену ('all - все строки')
# $file - файл в котором производим замену
if(!file_exists($file)){die("Файл '$file' не существует!");}
$f1 = htmlspecialchars(file_get_contents($file));
if($str!=='all'){
$str = $str-1;
$f_str = explode("\n",$f1);
$f2 = str_replace($from,$to,$f_str[$str]);
$f3 = str_replace($f_str[$str],$f2,$f1);
$result = $f3;
}else{
$f1 = htmlspecialchars(file_get_contents($file));
$f2 = str_replace($from,$to,$f1);
$result = $f2;
}
if(file_put_contents($file,$result))
{die ('Замена произведена успешно!');} else {die ('Ошибка замены!');}
}
# Пример использования:
$ex = explode('|',file_get_contents('1.dat'));
replace($ex[0],'yeah','all','1.dat');
# или так:
replace($ex[0],'yeah',7,'1.dat');
?>
26.
ramzes (28.07.2010 / 08:33)
че то жестокое ты изобразил
<?php
function replace_string($file, $line, $new, $old=''){
$text = file($file);
$text[$line] = ($old!='') ? str_replace($old, $new, $text[$line]) : $new."\r\n";
$ff = fopen($file, 'w');
fwrite($ff. implode('', $text));
fclose($ff);
}
?>
27.
Arab (28.07.2010 / 12:10)
хосты и хиты на файлах с проверкой на куки.
<?php
# Если гость впервые на сайте
if(empty($_COOKIE['day'])){
SetCookie("day",date('d'),time()+3600*24*350);
$static = file("statistic.dat");
$ud = explode("|",$static[0]);
$udnew = $ud[0]+1;
$udnew2 = $ud[1]+1;
if($ud[2]!=date('d')){ $udnew2=1; }
$newst = $udnew.'|'.$udnew2.'|'.date('d');
$fop = fopen("statistic.dat", "r+");
fputs($fop,$newst);
fclose($fop); }
#Eсли гость и раньше бывал на сайте
if(!empty($_COOKIE['day']) && $_COOKIE['day']!=date('d')){
SetCookie("day",date('d'),time()+3600*24*350);
$static = file("statistic.dat");
$ud = explode("|",$static[0]);
$udnew = $ud[1]+1;
if($ud[2]!=date('d')){ $udnew=1; }
$newst = $ud[0].'|'.$udnew.'|'.date('d');
$fop = fopen("statistic.dat", "r+");
fputs($fop,$newst);
fclose($fop); }
чтоб код работал создаем файл static.dat с содержанием 0|0|0
и выводим
$static = file("statistic.dat");
$ud = explode("|",$static[0]);
echo'Гостей сегодня: '.$ud[1].'<br>
Гостей за все время: '.$ud[0];
28.
iNeeXT (30.07.2010 / 21:37)
<?php
set_time_limit (0);
$excel = new COM("excel.application");
//Keep Excel invisible
$excel->Visible = 0;
//Create a new workbook
$wkb = $excel->Workbooks->Add();
$sheet = $wkb->Worksheets(1);
//This code adds the text 'Test' on row 2, column 4
$sheet->activate;
$files=array();
$a=1;
function recursedir($BASEDIR)
{
global $files;
$ext = array("html");
$files = array();
$hndl=opendir($BASEDIR);
while($file=readdir($hndl))
{
for($i=0;$i if(strstr($file, ".".$ext[$i])) $files[]=$file;
}
return $files;
}
// задаём директорию с которую нужно парсить
$BASEDIR="/1/";
recursedir($BASEDIR);
foreach($files as $file){
$fp = file_get_contents($BASEDIR.$file);
$fp=str_replace("**","\n \n",$fp);
$cell = $sheet->Cells($a,1);
$cell->Activate;
$cell->value =$fp ;
$a++;
}
$wkb->SaveAs("C:\excel123.xls");
//Quit MS Excel
$wkb->Close(false);
$excel->Workbooks->Close();
$excel->Quit();
unset($sheet);
unset($excel);
?>
PHP+Excel быстро генерируем XLS файлы
29.
KOZZ (31.07.2010 / 16:06)
минималистичный скрипт статистики)
записывает в файл реферер и к-во переходов (только если юзер пришел с других сайтов)
<? # запись реферера
$date = date('d_m_y'); $stat_f = "ref/$date.dat";
if(!file_exists($stat_f)){
file_pu t_contents ($stat_f,"Сайт | Переходов|");
}
$ref_f = file($stat_f);
$ref_f_str = implode('',$ref_f);
foreach($ref_f as $str){
if(!empty($str)){list($ref_ site [],$ref_kol[]) = explode('|',$str);}}
if(!empty($_SERVER['HTTP_REFER ER'])){ $refer = parse_url(
$_SERVER['HTTP_REF ERER']);
if(isset($refer['host']) && $refer['host']!==$_SERVER ['HTTP_HOST']) { if(preg_match('/(.+ )\.(.+ )\.(.{2 ,4 })/',$refer['host'])) {$refer['host'] = substr(strchr($refer ['host'],'.'),1);}
$searched = array_search($refer['host'],$re f_site);
if($searched == 0 ){
file_put_contents (
$stat_f,$ref_f_str."\n".$refer[ 'host'].'|1 |');
}else{
$ref_f[$searched] = $refer['host'].'|'.($ref_kol [$searched]+1)."|";
file_put_contents($stat_f,impl ode ('',$ref_f));} } } ?>
принимаю любую критику
30.
Azzido (10.08.2010 / 20:46)
Удаление невалидных символов XML (чаще всего для парсеров API)
<?php
function stripInvalidXml($value)
{
$ret = "";
$current;
if (empty($value))
{
return $ret;
}
$length = strlen($value);
for ($i=0; $i < $length; $i++)
{
$current = ord($value{$i});
if (($current == 0x9) ||
($current == 0xA) ||
($current == 0xD) ||
(($current >= 0x20) && ($current <= 0xD7FF)) ||
(($current >= 0xE000) && ($current <= 0xFFFD)) ||
(($current >= 0x10000) && ($current <= 0x10FFFF)))
{
$ret .= chr($current);
}
else
{
$ret .= " ";
}
}
return $ret;
}
31.
KOZZ (16.08.2010 / 23:09)
простенькая антиреклама
<?
function ad_cut($str,$to){
$domains = array('http://','.ru','.su','.mobi','.ws','.eu','.tv','.cc','.tv','.name','.us','.biz','.info','.org','.net','.com','.co','.in');
$replacer = array_fill(0,count($domains),$to);
$result = array_combine($domains,$replacer);
return strtr($str,$result);
}
?>
32.
KOZZ (21.08.2010 / 00:30)
удаление строки из файла
<?
function delete_str($f_name,$num){
# $f_name - файл в котором удаляем строку
# $num - номер удаляемой строки
$f = file($f_name);
unset($f[$num]);
if($num == (count($f)-1) && $num !== 0)
{$f[$num-1] = str_replace("\r\n",'',$f[$num-1]);}
if(file_put_contents($f_name,implode('',$f)))
{return true;} else {return false;}
}
?>
33.
KOZZ (21.08.2010 / 01:09)
47, поправочка:
<?
# удаление строки
function delete_str($f_name,$num){
$f = file($f_name);
unset($f[$num]);
if($num == count($f) && $num !== 0)
{$f[$num-1] = substr($f[$num-1],0,-2);}# убираем \r\n, если это последняя строка
if(file_put_contents($f_name,implode('',$f)))
{return true;} else {return false;}
}
?>
34.
Владислав (22.08.2010 / 16:05)
Определение дизайна сайта в зависимости от браузера
Не функция ) регулярка
$style = (preg_match('#linux|windows|Yahoo|Rambler|Yandex|Google|bsd|bsd|unix|macos|macintosh#i', $_SERVER['HTTP_USER_AGENT'])) ? 'web' : 'wap';
35.
Артём (23.08.2010 / 05:05)
Узнаем день недели из time();
function ned($time){
if (isset($time)){
$d = date("l",time());
$time = str_replace(array('Sunday','Monday','Tuesday','Wednesday','Friday','Saturday') , array('Воскресенье','Понедельник','Вторник','Четверг','Пятница','Суббота'), $d);
return $time; }else{ return false; }
}
пример:
echo ned(time());
36.
Санёк (23.08.2010 / 08:41)
Функция определения возраста по дате в формате 'dd.mm.yyyy'
function age($date)
{
$date=explode('.',$date);
$m=date('m');
$year=date('Y')-$date[2]-1;
if ($m>$date[1])
$year++;
if ($m==$date[1])
if (date('d')>=$date[0])
$year++;
return $year;
}
37.
Санёк (08.09.2010 / 21:52)
Не знаю на 100 % велосипед это или нет..
функция аналог imolode(), отлично от неё тем, что работает как с обычными так и многомерными массивами.
function my_implode($line,$array)
{
$end=count($array);
$str='';
for ($i=0; $i<$end; $i++)
{
if ($i==0)
$value=reset($array);
else
$value=next($array);
if (is_array($value))
$str.=my_implode($line,$value);
else
$str.=$value;
if ($i<($end-1))
$str.=$line;
}
return $str;
}
38.
Azzido (23.09.2010 / 07:13)
Вот из комментариев к функции implode на php.net
Recursive Implode
<?php
function r_implode($glue, $pieces)
{
foreach($pieces as $r_pieces)
{
if(is_array($r_pieces))
{
$retVal[] = r_implode($glue, $r_pieces);
}
else
{
$retVal[] = $r_pieces;
}
}
return implode($glue, $retVal);
}
?>
Пример:
<?php
$test_arr = array(0, 1, array('a', 'b'), array(array('x', 'y'), 'z'));
echo r_implode(',', $test_arr) . "\n";
$test_arr = array(0);
echo r_implode(',', $test_arr) . "\n";
?>
Эта функция побыстрее будет работать немного, чем опубликованая выше.
39.
iNeeXT (05.10.2010 / 23:24)
CSV/TSV-формат и PHP
<?
$rows = tsv_array($this->data['ModelName']['textarea_field']);
?>
и
<?
function tsv_array($s, $keys=false, $delimiter="\t") {
$rows = explode("\n", r("\r", '', trim($s)));
$min = null;
$max = null;
foreach ($rows as &$row) {
$row = array_map('trim', explode($delimiter, $row));
$count = count($row);
if ($min===null || $count<$min) {
$min = $count;
}
if ($max===null || $count>$max) {
$max = $count;
}
}
unset($row);
if ($max!=$min) {
foreach ($rows as &$row) {
for ($i=count($row); $i<=$max; $i++) {
$row[] = false;
}
}
unset($row);
}
if (!$keys) return $rows;
if ($keys===true) {
$keys = array_shift($rows);
}
$result = a();
foreach ($rows as $row) {
$item = a();
for ($i=0; $i<count($row); $i++) {
if (!isset($keys[$i])) continue;
$item[$keys[$i]] = $row[$i];
}
$result[] = $item;
}
return $result;
}
?>
Добавлено через 01:56 сек.
Преобразовать в верхний регистр первый символ строки
<?
function ucwords(string) {
return string.charAt(0).toUpperCase() + string.substr(1).toLowerCase();
}
40.
iNeeXT (05.10.2010 / 23:28)
Преобразование переводов строк
Метод преобразует переводы строк вне тэгов <pre> в тэги <br />. Данная функция идентична встроенной в PHP nl2br() за исключением того, что она игнорирует пробелы в тэгах <pre>.
<?
if ( ! function_exists('nl2br_except_pre'))
{
function nl2br_except_pre($str)
{
$ex = explode("pre>",$str);
$ct = count($ex);
$newstr = "";
for ($i = 0; $i < $ct; $i )
{
if (($i % 2) == 0)
{
$newstr .= nl2br($ex[$i]);
}
else
{
$newstr .= $ex[$i];
}
if ($ct - 1 != $i)
$newstr .= "pre>";
}
return $newstr;
}
}
Добавлено через 01:04 сек.
Функция преобразует XML-символы в их сущности
Принимает строку и преобразует в ней зарезервированные XML-символы в их сущности:
Амперсанд: &
Знаки больше и меньше: < >
Одинарная и двойная кавычки: ' "
Дефис: -
Эта функция игнорирует амперсанд, если он является частью существующих сущностей.
<?
if ( ! function_exists('xml_convert'))
{
function xml_convert($str)
{
$temp = '__TEMP_AMPERSANDS__';
// Replace entities to temporary markers so that
// ampersands won't get messed up
$str = preg_replace("/&#(\d );/", "$temp\\1;", $str);
$str = preg_replace("/&(\w );/", "$temp\\1;", $str);
$str = str_replace(array("&","<",">","\"", "'", "-"),
array("&", "<", ">", """, "'", "-"),
$str);
// Decode the temp markers back to entities
$str = preg_replace("/$temp(\d );/","&#\\1;",$str);
$str = preg_replace("/$temp(\w );/","&\\1;", $str);
return $str;
}
}
41.
KOZZ (05.11.2010 / 21:50)
функция полезна тем кто использует файлы как таблицу для хранения информации (типа "Вася Пупкин
|10 лет
|город Москва
|")
функция для замены отдельного блока информации в файле
(например заменить блок "город Москва" на "поселок Эльбан")
пример использования:
explode_replace('|',0,'поселок Эльбан',1,'file.txt');
<?
function explode_replace($exploder,$ex_num,$to,$str_num,$file){
# $exploder - разделитель
# $ex_num - номер заменяемого блока (отсчет с 0)
# $to - на что заменяем
# $str_num - номер строки в которой производим замену (отсчет с 0)
# $file - файл в котором производим замену
$a = file($file);
$ex = explode($exploder,$a[$str_num]);
$ex[$ex_num] = $to;
$a[$str_num] = implode($exploder,$ex);
if(file_put_contents($file,$a)){return true;} else {return false;}
}
?>
42.
4Design (10.11.2010 / 13:05)
Склоняем русские слова
function russian_text($koll = 0, $words = 0) {
if ($koll < 11 or $koll > 19) {
$koll = (string )$koll;
switch ($koll{mb_strlen($koll) - 1}) {
case 1:
return ($words[0]);
break;
case 2:
case 3:
case 4:
return ($words[1]);
break;
default:
return ($words[2]);
break;
}
}
else
return ($words[2]);
}
43.
Владислав (15.11.2010 / 17:51)
/**
* Функция рекурсивного подсчета файлов в папке
*/
function filedircount($dir)
{
$count = 0;
if ($objs = glob($dir."/*")) {
foreach($objs as $obj) {
if(is_dir($obj)) {
$count += filedircount($obj);
} else {
++$count;
}
}
}
return $count;
}
44.
Евгений (15.11.2010 / 21:12)
функции для проверки, начинается/заканчивается ли строка подстрокой (аналог startsWith/endsWith в Java)
function startsWith($haystack, $needle, $case=true) {
if ($case)
return strncmp($haystack, $needle, strlen($needle)) == 0;
else
return strncasecmp($haystack, $needle, strlen($needle)) == 0;
}
function endsWith($haystack, $needle, $case=true) {
return startsWith(strrev($haystack),strrev($needle),$case);
}
45.
Lugaro (25.11.2010 / 17:13)
<?
/*Зебра с неограниченным количеством дивов
Указываем список дивов и функция выводит их по очереди*/
function zebra(){
static $divs;
if(!isset($divs) || $divs != func_get_args()) $divs = func_get_args();
$div = current($divs);
if(next($divs) === false) reset($divs);
return $div;
}
//Пример:
for ($i=0; $i<10; $i++) {
$div = zebra('zebra1', 'zebra2');
echo '<div class="'.$div.'">'.$div.'</div>';
}
46.
KOZZ (30.11.2010 / 19:53)
<?
// Функция для того, чтобы иЗyPoДоВаТь текст
$str = 'бросайте вы корявить текст';
function koryavka ($t){
$c = strlen($t);
for($i=0;$i<$c;$i++) {
$t[$i] = (is_int($i/2)) ? strtoupper($t[$i]) : $t[$i];
$ret[] = $t[$i];
}
return implode('',$ret);
}
echo koryavka ($str);
?>
47.
KOZZ (11.12.2010 / 07:41)
<?
# функция градиента текста (переливание цвета)
function gradient($text, $hexfrom, $hexto){
$text = iconv('utf-8','windows-1251',$text);
$colorsteps = strlen($text);
$fromrgb['r'] = hexdec(substr($hexfrom, 0, 2));
$fromrgb['g'] = hexdec(substr($hexfrom, 2, 2));
$fromrgb['b'] = hexdec(substr($hexfrom, 4, 2));
$torgb['r'] = hexdec(substr($hexto, 0, 2));
$torgb['g'] = hexdec(substr($hexto, 2, 2));
$torgb['b'] = hexdec(substr($hexto, 4, 2));
$steprgb['r'] = ($fromrgb['r'] - $torgb['r']) / ($colorsteps - 1);
$steprgb['g'] = ($fromrgb['g'] - $torgb['g']) / ($colorsteps - 1);
$steprgb['b'] = ($fromrgb['b'] - $torgb['b']) / ($colorsteps - 1);
for($i = 0; $i <= $colorsteps; $i++){
$rgb['r'] = floor($fromrgb['r'] - ($steprgb['r'] * $i));
$rgb['g'] = floor($fromrgb['g'] - ($steprgb['g'] * $i));
$rgb['b'] = floor($fromrgb['b'] - ($steprgb['b'] * $i));
$hexrgb['r'] = sprintf('%02x', ($rgb['r']));
$hexrgb['g'] = sprintf('%02x', ($rgb['g']));
$hexrgb['b'] = sprintf('%02x', ($rgb['b']));
$color = implode(null, $hexrgb);
$return .= '<font color="'.$color.'">'.$text[$i].'</font>';
}
return iconv('windows-1251','utf-8',$return);
}
echo gradient('Супер пупер текст в градиенте','000000', 'FF0000'); // пример использования
?>
48.
Lugaro (24.12.2010 / 08:00)
Наткнулся в одном блоге на неплохую функцию, только переделал установку параметров, ато там слишком длинно было.
Исходный вариант и саму суть можно тут посмотреть
http://www.manhunter.ru/webmaster/15_seychas_na_sayte_2_gostey_i_3_novostey.html
<?
function num2word() {
$args = func_get_args();
$num = $args[0]%100;
if ($num>19) { $num=$num%10; }
switch ($num) {
case 1: { return $args[1]; }
case 2:
case 3:
case 4: { return $args[2]; }
default: { return $args[3]; }
}
}
?>
Пример:
<?
echo '1 '.num2word(1, 'рубль', 'рубля', 'рублей'); // 1 рубль
echo '2 '.num2word(2, 'рубль', 'рубля', 'рублей'); // 2 рубля
echo '5 '.num2word(5, 'рубль', 'рубля', 'рублей'); // 5 рублей
?>
Конечно при многократном использовании с одинаковыми параметрами исходный вариант был бы удобней, но по сути такое многократное применение бывает очень редко
49.
Titov (22.01.2011 / 23:14)
выведет список файлов из директории по маске имени файлв
<?php
function SearchMaska($dir, $maska){
// Открыть заведомо существующий каталог и начать считывать его содержимое
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if(($file !=".") && ($file !="..")){
if($myfile = stristr($file,$maska)){
print "Файл: $myfile<br/>";
}
}
}
closedir($dh);
}
}
}
SearchMaska('dir/', 'filename'); //// часть имени файла
?>
50.
Марсель (23.01.2011 / 00:17)
Более легкий вариант)
<?php
function SearchMaska($dir, $maska){
if (is_dir($dir)) {
foreach(array_diff(scandir($dir), array('.', '..')) as $file) {
if($myfile = stristr($file, $maska))
echo 'Файл: '.$myfile.'<br/>';
}
}
}
SearchMaska('dir/', 'filename'); //// часть имени файла
?>
51.
Titov (24.03.2011 / 19:12)
копирайт на картинку
1 вариант картинка на картинку:
<?php
$img = $_GET['img']; /// путь к картинке которую копирайтим
$im = imagecreatefromjpeg($img);
$lg = imagecreatefrompng('copyrite.png'); /// наша картинка копирайта
$img_x = imagesx($im);
$img_y = imagesy($im);
$img_x_copy = imagesx($lg);
$img_y_copy = imagesy($lg);
imagecopy($im, $lg, $img_x-$img_x_copy, $img_y-$img_y_copy, 0, 0, $img_x_copy, $img_y_copy);
header('Content-Type: image/jpeg');
imagejpeg($im);
imagedestroy($im); /// чистим мусор
imagedestroy($lg); /// чистим мусор
?>
второй вариант текст на картинку:
<?php
$img = $_GET['img'];
$copy = strtoupper($_SERVER['HTTP_HOST']);
if ($img == "") exit();
writeTextOnImage($img, "Www.MySuperSite.Com");
function writeTextOnImage($filename, $text)
{
if ($filename == "") exit();
$size_img = getimagesize($filename);
if ($size_img[2]==2) $src_img = imagecreatefromjpeg($filename);
else if ($size_img[2]==1) $src_img = imagecreatefromgif($filename);
else if ($size_img[2]==3) $src_img = imagecreatefrompng($filename);
if (!$src_img) exit();
// Назначаем цвет
$color = imagecolorallocatealpha($src_img, 255, 255, 0, 10);
$font_file = "impact.ttf";
$img_x = imagesx($src_img);
$img_y = imagesy($src_img);
$height_font = 13;
$angle = 0;
// Запись текста поверх изображения
$xminus = $img_x - 130;
$box = imagettftext($src_img, $height_font, $angle, $xminus, $img_y - 8, $color, $font_file, $text);
// Вывод изображения в браузер
if ($size_img[2]==2)
{
header ("Content-type: image/jpeg");
imagejpeg($src_img);
}
else if ($size_img[2]==1)
{
header ("Content-type: image/gif");
imagegif($src_img);
}
else if ($size_img[2]==3)
{
header ("Content-type: image/png");
imagepng($src_img);
}
return true;
}
?>
52.
ZipeR (05.04.2011 / 14:41)
Календарь. Скрипт на php
Скрипт предназначен для отображения календаря на текущий месяц
Календарь в американском формате
<?php
// Вычисляем число дней в текущем месяце
$dayofmonth = date('t');
// Счётчик для дней месяца
$day_count = 1;
// 1. Первая неделя
$num = 0;
for($i = 0; $i < 7; $i++)
{
// Вычисляем номер дня недели для числа
$dayofweek = date('w',
mktime(0, 0, 0, date('m'), $day_count, date('Y')));
// Приводим к числа к формату 1 - понедельник, ..., 6 - суббота
$dayofweek = $dayofweek - 1;
if($dayofweek == -1) $dayofweek = 6;
if($dayofweek == $i)
{
// Если дни недели совпадают,
// заполняем массив $week
// числами месяца
$week[$num][$i] = $day_count;
$day_count++;
}
else
{
$week[$num][$i] = "";
}
}
// 2. Последующие недели месяца
while(true)
{
$num++;
for($i = 0; $i < 7; $i++)
{
$week[$num][$i] = $day_count;
$day_count++;
// Если достигли конца месяца - выходим
// из цикла
if($day_count > $dayofmonth) break;
}
// Если достигли конца месяца - выходим
// из цикла
if($day_count > $dayofmonth) break;
}
// 3. Выводим содержимое массива $week
// в виде календаря
// Выводим таблицу
echo "<table border=1>";
for($i = 0; $i < count($week); $i++)
{
echo "<tr>";
for($j = 0; $j < 7; $j++)
{
if(!empty($week[$i][$j]))
{
// Если имеем дело с субботой и воскресенья
// подсвечиваем их
if($j == 5 || $j == 6)
echo "<td><font color=red>".$week[$i][$j]."</font></td>";
else echo "<td>".$week[$i][$j]."</td>";
}
else echo "<td> </td>";
}
echo "</tr>";
}
echo "</table>";
?>
53.
ZipeR (05.04.2011 / 14:43)
Для того чтобы вывести календарь в российком формате, необходимо изменить только блок вывода 3
Календарь в российком формате
<?php
...
// Выводим содержимое массива $week
// в виде календаря
// Выводим таблицу
echo "<table border=1>";
for($j = 0; $j < 7; $j++)
{
echo "<tr>";
for($i = 0; $i < count($week); $i++)
{
if(!empty($week[$i][$j]))
{
// Если имеем дело с субботой и воскресенья
// подсвечиваем их
if($j == 5 || $j == 6)
echo "<td><font color=red>".$week[$i][$j]."</font></td>";
else echo "<td>".$week[$i][$j]."</td>";
}
else echo "<td> </td>";
}
echo "</tr>";
}
echo "</table>";
?>
Для того чтобы вывести календарь на произвольный месяц, достаточно передать в качестве второго параметра функции date() любую дату месяца в виде числа секунд, прошедших с полуночи 1 января 1970 года.
54.
ZipeR (05.04.2011 / 14:47)
Подсчёт числа строк в программном проекте
<?php
//////////////////////////////////////////////////////////
// Рекурсивная функция - спускаемся вниз по каталогу
//////////////////////////////////////////////////////////
function scan_dir($dirname)
{
// Объявляем переменные замены глобальными
GLOBAL $extentions, $count;
// Открываем текущую директорию
$dir = opendir($dirname);
// Читаем в цикле директорию
while (($file = readdir($dir)) !== false)
{
// Если файл обрабатываем его содержимое
if($file != "." && $file != "..")
{
// Если имеем дело с файлом - производим в нём замену
if(is_file($dirname."/".$file))
{
// Извлекаем из имени файла расширение
$ext = strrchr($dirname."/".$file, ".");
foreach($extentions as $exten)
if(preg_match($exten, $ext))
{
// Читаем содержимое файла
$content = file($dirname."/".$file);
// Подсчтываем число файлов
$count += count($content);
// Удаляем массив
unset($content);
}
}
// Если перед нами директория, вызываем рекурсивно
// функцию scan_dir
if(is_dir($dirname."/".$file))
{
scan_dir($dirname."/".$file);
}
}
}
// Закрываем директорию
closedir($dir);
}
?>
Воспользоваться результатами можно при помощи следующего кода
Код вызова функции scan_dir()
<?php
// Имя корневой директории проекта
$dirname = "softtime";
// Массив с расширениями файлов, для которых следует подсчитывать
// число строк
$extentions = array("#\.php#i");
// $extentions = array("#\.cpp#i","#\.h#i");
// Счётчик строк - глобальная переменная
$count = 0;
// Вызов функции, осуществляющей рекурсивный спуск по подкаталогам
// корневого каталога
scan_dir($dirname);
// Записываем число строк в переменную $count
file_put_contents("test",$count);
?>
55.
ZipeR (05.04.2011 / 14:48)
Подсветка синтаксиса кода на PHP
Пример скрипта вы видете в полезных кусках кода на этом форуме.
<?php
// подавляем предупреждение
error_reporting(0);
function highlight_code($code)
{
// если до этого $code обрабатывали функцией
// htmlspecaialchars, здесь нужно дописать код, который отменяет ее действие
$code = stripslashes($code);
if(!strpos($code,"<?") && substr($code,0,2)!="<?") {
$code="<?php\\n".trim($code)."\\n?>";
}
$code = trim($code);
return highlight_string($code,true);
}
// вызываем функцию, к примеру так
// пример кода
$code = '
if(!$flag)
{
// пишем всякую ерунду
echo("Hello");
$var = 1;
}
else break;';
// вызываем функцию
echo highlight_code($code);
?>
Добавлено через 02:37 сек.
Перевод русского текста в транслит
<?php
// функция превода текста с кириллицы в траскрипт
function encodestring($st)
{
// Сначала заменяем "односимвольные" фонемы.
$st=strtr($st,"абвгдеёзийклмнопрстуфхъыэ_",
"abvgdeeziyklmnoprstufh'iei");
$st=strtr($st,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_",
"ABVGDEEZIYKLMNOPRSTUFH'IEI");
// Затем - "многосимвольные".
$st=strtr($st,
array(
"ж"=>"zh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh",
"щ"=>"shch","ь"=>"", "ю"=>"yu", "я"=>"ya",
"Ж"=>"ZH", "Ц"=>"TS", "Ч"=>"CH", "Ш"=>"SH",
"Щ"=>"SHCH","Ь"=>"", "Ю"=>"YU", "Я"=>"YA",
"ї"=>"i", "Ї"=>"Yi", "є"=>"ie", "Є"=>"Ye"
)
);
// Возвращаем результат.
return $st;
}
?>
56.
Azzido (05.04.2011 / 23:19)
Оптимизировал функцию опубликованную Mackler aka Бородатый Одмин.
Код подсчёта общего размера файлов в папке (с вложенными папками):
<?php
function dirsize($path)
{
$size = 0;
$dir_handle = opendir($path);
while (($filename = readdir($dir_handle)) !== false) {
if ($filename <> '.' and $filename <> '..') {
if (is_dir($path . '/' . $filename)) {
$size += dirsize($path . '/' . $filename);
} elseif (is_file($path . '/' . $filename)) {
$size += filesize($path . '/' . $filename);
}
}
}
closedir($dir_handle);
return $size;
}
?>
Использование:
<?php
echo dirsize('/www/site.ru/dir/');
?>
Получаем общий размер папки в БАЙТАХ.
Добавлено через 03:51 сек.
Оптимизировал функцию опубликованную Mackler aka Бородатый Одмин.
Функция удаления папки с подпапками:
<?php
function dirclear($path)
{
$dir_handle = opendir($path);
while (($filename = readdir($dir_handle)) !== false) {
if ($filename <> '.' and $filename <> '..') {
if (is_dir($path . '/' . $filename)) {
dirclear($path . '/' . $filename);
} else {
unlink($path . '/' . $filename);
}
}
if (rmdir($path . '/' . $filename)) {
return true;
} else {
return false;
}
}
closedir($dir_handle);
}
?>
Использование:
<?php
dirclear('/www/site.ru/dir/');
?>
57.
ZipeR (06.04.2011 / 14:29)
Постраничная навигация на файлах
Файл данных text.txt
1 Программирование
2 Программирование на PHP
3 Программирование на JavaScript
4 Программирование на ASP.NET
5 Программирование на Java
6 Программирование на Perl
7 Программирование на C++
8 Программирование на Pascal
9 Программирование на Fortran
10 Программирование на Assembler
Постраничная навигация
<?php
// Имя файла
$filename = "text.txt";
// Число позиций на странице
$pnumber = 3;
// Открываем файл для чтения
$bufer = file_get_contents($filename);
// Находим все строки при помощи регулярного выражения
preg_match_all("#([\d]+) ([^\n]+)(\n|$)#U",
$bufer,
$out,
PREG_PATTERN_ORDER);
// Формируем промежуточный массив
for($i = 0; $i < count($out[1]); $i++)
{
$temp[] = trim($out[2][$i]);
}
// Проверяем передан ли номер текущей страницы
if(isset($_GET['page'])) $page = $_GET['page'];
else $page = 1;
// Число страниц
$total = count($temp);
$number = (int)($total/$pnumber);
if((float)($total/$pnumber) - $number != 0) $number++;
$start = (($page - 1)*$pnumber + 1);
$end = $page*$pnumber + 1;
if($end > $total) $end = $total;
// Выводим содержимое страниц
for($i = $start; $i < $end; $i++)
{
echo $temp[$i]."<br>";
}
// Постраничная навигация
for($i = 1; $i <= $number; $i++)
{
// Если это произвольная страница
if($i != $number)
{
if($page == $i)
{
echo "[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."] ";
}
else
{
echo "<a href='$_SERVER[PHP_SELF]?page=$i'>[".
(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</a> ";
}
}
// Если это последняя страница заменяем последнюю цифру
// максимальным числом позиций в массиве $temp
else
{
if($page == $i)
{
echo "[".(($i - 1)*$pnumber + 1)."-".($total - 1)."] ";
}
else
{
echo "<a href='$_SERVER[PHP_SELF]?page=$i'>[".
(($i - 1)*$pnumber + 1)."-".($total - 1)."]</a> ";
}
}
}
?>
58.
ZipeR (07.04.2011 / 16:22)
Вывод случайной цитаты(статьи).
<?php
$quotes[] = 'Монета, упавшая на дно реки, может показаться рыбам подарком с неба. Что они будут делать с этим подарком?';
$quotes[] = 'Если увидишь нечто, к чему стоит приложить руку, поступи не так, как подсказывает разум, но как велит настроение.';
$quotes[] = 'Если то, что ты делаешь, трудно тебе - посмотри, нуждаешься ли ты в этом.';
$quotes[] = 'Возможно, твои ошибки - это то, что нужно Миру.';
$quotes[] = 'Всякий может ударить слабого, но только слабый хочет ударить слабого.';
srand ((double) microtime() * 1000000);
$random_number = rand(0,count($quotes)-1);
?>
Выводим на страницу:
<?php
echo ($quotes[$random_number]);
?>
59.
ramzes (07.04.2011 / 23:12)
66.
ZipeR, echo array_rand($quotes);
Добавлено через 09:57 сек.
<?php
function navi($self, // текущий url
$total, // кол-во элементов
$page, // текущая страница
$step // кол-во элементов на страницу
){
$return.='<b>Страницы:</b> ';
if($page>0){ $return.='<a href="'.$self.'page='.($page - $step).'&'.SID.'"><b>«</b></a>';
}else{ $return.='<span class="navithis">«</span>';} // вперед
if($total>0){
$ba=ceil($total/$step);
$ba2=$ba*$step-$step;
$asd=$page-($step*3);
$asd2=$page+($step*4);
if($asd<$total && $asd>0){ $return.='<a href="'.$self.'page=0&'.SID.'">1</a><span class="navithis">←</span>'; }
for($i=$asd; $i<$asd2;){
if($i<$total && $i>=0){
$ii=floor(1+$i/$step);
if($page==$i){ $return.='<span class="navithis">'.$ii.'</span>';
}else{
$return.='<a href="'.$self.'page='.$i.'&'.SID.'">'.$ii.'</a>'; }}
$i=$i+$step; }
if($asd2<$total){ $return.='<span class="navithis">→</span><a href="'.$self.'page='.$ba2.'&'.SID.'">'.$ba.'</a>'; }}
if($total > $page + $step){ $return.='<a href="'.$self.'page='.($page + $step).'&'.SID.'"><b>»</b></a>';
}else{ $return.='<span class="navithis">»</span>'; } // назад
return '<div class="navi">'.$return.'</div>';
}
?>
типа того
60.
ZipeR (10.04.2011 / 14:57)
Снятие скриншота с 3gp видеоролика
<?php
/*
* Снятие скриншота с 3gp видеоролика
* автор: nc_soft
* 17.01.08
*/
if (!class_exists(ffmpeg_movie))
{
die('ничего не выйдет, нужна ffmpeg на хостинге');
}
//создание объекта (тестовый файл test.3gp)
$file='test.3gp';
if (file_exists($file))
{
$mov = new ffmpeg_movie($file);
}
else
{
die('невозможно найти файл');
}
//номер кадра
$frame = 50;
//ширина
$w = $mov->GetFrameWidth();
//высота
$h = $mov->GetFrameHeight();
//извлечение кадра
$ff_frame = $mov->getFrame($frame);
if ($ff_frame)
{
//в формат GD
$gd_image = $ff_frame->toGDImage();
if ($gd_image)
{
//вывод (для примера в gif)
header('Content-type: image/gif');
imagegif($gd_image);
/*можно сделать изменение размера, нанесение копирайтов и водяных знаков, в общем все что применимо для GD*/
}
else
{
die('невозможно преобразовать в GD');
}
}
else
{
die('невозможно извлечь кадр');
}
/*
описания всех методов ffmpeg_movie смотрим тут
http://ffmpeg-php.sourceforge.net/doc/api/ffmpeg_movie.php
*/
?>
Добавлено через 01:44 сек.
Анимация из видео
<?php
$file = "file.avi";
$movie = new ffmpeg_movie($file);
$gif=new ffmpeg_animated_gif("image.gif",100 ,100 ,24);
for ($frame = 150; $frame <= 200; $frame++) {
$image = $movie->getFrame($frame);
$gif->addFrame($image);}
?>
Получаем анимированную картинку из видео!
необходима поддержка ffmpeg
61.
ZipeR (10.04.2011 / 15:00)
Отправка сообщений на email
<?php
function mail_send($email, $smail, $subject, $message, $info = '', $pr = '')
{
$email = text_filter( $email );
$smail = text_filter( $smail );
$subject = text_filter( $subject );
$pr = ( !$pr ) ? 3 : intval( $pr );
if( $info ) $message = $message . ' ' . _IP . ': '. getip() . ' ' . _BROWSER . ': ' . getagent();
$mheader = 'MIME-Version: 1.0n'
.'Content-Type: text/html; charset=' . _CHARSET . 'n'
.'Content-Transfer-Encoding: 8bitn'
.'Reply-To: "' . $smail .'" <' . $smail .'>n'
.'From: "' . $smail .'" <' . $smail .'>n'
.'Return-Path: <' . $smail .'>n'
.'X-Priority: ' . $pr .'n'
.'X-Mailer: CMS Mailern';
return mail( $email, $subject, $message, $mheader );
?>
Отправка сообщений на email
$info - указываем true, чтобы в письмо добавилась информация о IP и браузере пользователя
$pr - приоритет письма 1..5
Добавлено через 01:56 сек.
Защита от XSS
<?php
function antihack(&$var){
if(is_array($var)) array_walk($var, 'antihack');
else $var = htmlspecialchars(stripslashes(mysql_real_escape_string($var)), ENT_QUOTES, 'UTF-8');
}
foreach(array('_SERVER', '_GET', '_POST', '_COOKIE', '_REQUEST') as $v){
if(!empty(${$v})) array_walk(${$v}, 'antihack');
}
?>
Добавлено через 04:08 сек.
Защита от прямых ссылок
<?php
# Защита от прямых ссылок
# автор: Nc_Soft
# 05.07.09
# Это позволит скачать ваш файл только с вашего сайта.
# надо создать вот такой .htaccess
RewriteEngine on
RewriteBase /
# если надо разрешить скачку при пустом рефере раскомментируйте это
# RewriteCond %{HTTP_REFERER} !^$
# Дальше список идет набор разрешенных доменов
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?snippets.pp.ru [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?wen.ru [NC]
# Форматы файлов, для которых устанавливается защита (например, mp3)
RewriteRule .(mp3)$ http://ya.ru
#Все запросы на http://snippets.pp.ru/1.mp3 перекинутся на http://ya.ru
?>
# Это позволит скачать ваш файл только с вашего сайта.
# надо создать вот такой .htaccess
62.
ZipeR (10.04.2011 / 15:08)
Антиреклама
<?php
function antispam_help($text)
{
$dom = array('www\.','wap\.'); //поддомены
if(preg_match('#^(https?|ftp)://('.implode('|',$dom).')?'.str_replace('.', '\.', $_SERVER['SERVER_NAME']).'#', $text[0]))
return '<a href="'.$text[0].'">'.$text[0].'</a>';
else
return '[реклама]';
}
function antispam($text)
{
return preg_replace_callback("#(https?|ftp)://\S+[^\s.,>)\];'\"!?]#", 'antispam_help', $text);
}
?>
Функция антиспама. Заменяет все левые ссылки на слово [реклама], а остальные подсвечивает.
Применение:
echo antispam($text);
Где $text - ваш текст.
Добавлено через 01:05 сек.
Функция проверки пароля на безопастность
<?php
/*
Задача:
Написать функцию проверки пароля на безопасность
* длина не меньше 6 символов
* должен содержать и символы и числа
* не должен содержать больше (>=) 3 линейно расположенных на клавиатуре символов или цифр, например таких как "lkj" или "cvb"
* если пароль безопасен - вернуть истину, нет - ложь
*/
functionisGood ($pass)
{$kbStrings = array('1234567890','qwertyuiop','asdfghjkl','zxcvbnm',
'0987654321','poiuytrewq','lkjhgfdsa','mnbvcxz');
$isGood = false;
if (strlen($pass) >= 6) {
if (preg_match('/[a- z]/i',$pass) && preg_match('/[0-9]/',$pass)) {
$count = strlen($pass) - 2;
$isGood = true;
} else {
$isGood = false;
break 2;
} } } } } return $isGood;
}
?>
Добавлено через 02:49 сек.
Вывод даты нормальным русским языком
<?php
function rusdate($d)
{
$montharr = array("января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря");
$i = date("m",$d) - 1;
return date("j",$d)." $montharr[$i] ".date("Y",$d);
}
?>
63.
ZipeR (10.04.2011 / 15:12)
Перевод секунд в дни(функция из WAP-MotoR)
<?php
function makestime($string) {
$day=floor($string/86400);
$hours=floor(($string/3600)-$day*24);
$min=floor(($string-$hours*3600-$day*86400)/60);
$sec=$string-($min*60+$hours*3600+$day*86400);
return $day.' дн. '.$hours.':'.$min.':'.$sec;
}
?>
Добавлено через 00:46 сек.
Определяем часть дня
<?php
function hi(){
$h=date('H');
$i=date('i');
if ($h>=0 && $h<=4){$hi='Доброй ночи!'; }
elseif ($h>4 && $h<=12){$hi='Доброе утро!';}
elseif ($h>=12 && $h<=17){$hi='Добрый день!';}
elseif ($h>=17 && $h<=22){$hi='Добрый вечер!';}
elseif ($h>=22 && $h<=23){$hi='Доброй ночи!';}
return $hi;}
?>
Определение утра, дня, вечера и ночи
Добавлено через 02:06 сек.
Создание скриншота сайта
<?php
$browser = new COM("InternetExplorer.Application");
$handle = $browser->HWND;
$browser->Visible = true;
$browser->Navigate("http://ya.ru");
while ($browser->Busy) {
com_message_pump(4000);
}
$im = imagegrabwindow($handle, 0);
$browser->Quit();
imagepng($im, "iesnap.png");
?>
Создание скриншота сайта
Работает под виндой на PHP 5 >= 5.2.2
Добавлено через 07:31 сек.
Функция Антимата
<?php
//Маты записываёте в antmat.dat
function antimat($msg) {
if (file_exists("antimat.dat")) {
$mat = file_get_contents("antimat.dat");
$arr_mat = explode("|",$mat);
foreach($arr_mat as $value) {
if($value != "") {
$msg = preg_replace("|$value|iu","***",$msg);
}}}
return $msg;
}
?>
64.
ZipeR (10.04.2011 / 15:24)
Функция BBCode
<?php
function bbcode($var = '')
{
$var = strip_tags($var);
$var = ereg_replace("&", "&", $var);
$var = ereg_replace("\[br\]", "<br/>", $var);
$var = preg_replace('#\[b\](.*?)\[/b\]#si', '<span style="font-size: 20px">\1</span>', $var);
$var = preg_replace('#\[img\](.*?)\[/img\]#si', '<a href=\"\1\" title=\"Нажмите для масштабирования\"><img src=\"\1\" width=\"100\" height=\"100\" alt=\"Картинка\"/></a>', $var);
$var = preg_replace('#\[i\](.*?)\[/i\]#si', '<i>\1</i>', $var);
$var = preg_replace('#\[u\](.*?)\[/u\]#si', '<u>\1</u>', $var);
$var = preg_replace('#\[s\](.*?)\[/s\]#si', '<strike>\1</strike>', $var);
$var = preg_replace('#\[red\](.*?)\[/red\]#si', '<font color="#ff7900">\1</font>', $var);
$var = preg_replace('#\[green\](.*?)\[/green\]#si', '<font color="#00FF00">\1</font>', $var);
$var = preg_replace('#\[blue\](.*?)\[/blue\]#si', '<font color="#0000FF">\1</font>', $var);
$var = preg_replace('#\[url=(.*?)\](.*?)\[/url\]#si', '<a href="\1">\2</a>', $var);
return $var;
}
?>
65.
ZipeR (17.04.2011 / 14:09)
Функция для наложения водяного знака на изображение.
Передается 2 параметра: $file – путь до исходного изображения, $watermark – путь до картинки-водяного знака.
После того, как функция отработает, поверх исходного файла в нижнем правом углу появляется водяной знак.
<?php
function watermark($file, $watermark) {
if(empty($file) | empty($watermark)) return false;
$wh = getimagesize($watermark);
$fh = getimagesize($file);
$rwatermark = imagecreatefromjpeg($watermark);
//Иногда может понадобиться наложить прозрачный png, тогда заменяем функцию на imagecreatefrompng
$rfile = imagecreatefromjpeg($file);
imagecopy($rfile, $rwatermark, $fh[0] - $wh[0], $fh[1] - $wh[1], 0, 0, $wh[0], $wh[1]);
imagejpeg($rfile, $file, '100');
imagedestroy($rwatermark);
imagedestroy($rfile);
return true;
}
watermark('1.jpg', '2.jpg'); //Теперь 1.jpg в нижнем правом углу обляпался 2.jpg
?>
Добавлено через 02:29 сек.
Функция для изменения размеров изображения.
Передается 4 параметра: $file – путь до исходного изображения, $out – путь, куда сохранить изображение с новым размером, $w – ширина на выходе, $q – качество.
<?php
function resize_image($file, $out, $w = 200, $q = 90) {
if(empty($file) | empty($out)) return false;
$src = imagecreatefromjpeg($file);
$w_src = imagesx($src);
$h_src = imagesy($src);
$ratio = $w_src/$w;
$w_dest = round($w_src/$ratio);
$h_dest = round($h_src/$ratio);
$dest = imagecreatetruecolor($w_dest, $h_dest);
imagecopyresampled($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src);
imagejpeg($dest, $out, $q);
imagedestroy($dest);
imagedestroy($src);
return true;
}
resize_image('1.jpg', '2.jpg', 200, 50); //Изменяет размер картинки 1.jpg, лежащей в одной папке со скриптом, уменьшенное изображение сохраняет как 2.jpg
?>
66.
KOZZ (18.06.2011 / 20:15)
<?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>«</big></a> ... <a href="?p='.($p-1).'">Назад</a> ';}
echo '•';
if($p<$nav['pages']) {echo ' <a href="?p='.($p+1).'">Далее</a> ... <a href="?p='.$nav['pages'].'"><big>»</big></a>';}
}
?>
67.
Владислав (10.07.2011 / 23:00)
<?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');
?>
с рекурсивом
68.
Titov (23.08.2011 / 15:11)
функция шифрования пароля
<?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;
}
?>
69.
3DwEp (23.12.2011 / 01:07)
Подсчёт возраста по дате рождения
<?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); // Число , Месяц, Год
?>
70.
halsoft (23.12.2011 / 11:07)
80. Давай упрощу эту функцию:
<?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);
?>
Ну это для тех, кто моложе 1970 ))
71.
KOZZ (23.12.2011 / 21:57)
Функция отмечает выделенный вариант формы 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 : '';
}
?>
72.
Николай (11.01.2012 / 11:38)
Переименование файлов при занесение в базу данных и дерикторию соответственно
<?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;
}
?>
73.
Azzido (21.07.2012 / 21:11)
Шифрование по ключу
(Источник: 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
74.
Azzido (23.07.2012 / 20:18)
Рекурсивное удаление всех файлов и каталогов
<?php
function rrmdir($dir) {
foreach(glob($dir . '/*') as $file) {
if(is_dir($file))
rrmdir($file);
else
unlink($file);
}
rmdir($dir);
}
rrmdir('tmp/dir/cleandir');
?>
75.
ramzes (02.12.2014 / 12:48)
Функция определения приоритетного языкового пакета, из заголовков браузера
<?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
76.
Станислав Крунич (08.12.2014 / 13:14)
<?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;
}
77.
Titov (18.07.2023 / 15:45)
Функция определения приоритетного языкового пакета, из заголовков браузера
<?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);
?>
78.
Titov (18.07.2023 / 15:55)
Рекурсивное удаление всех файлов и каталогов
Azzido 23.07.2012 / 20:18
или так
function recursiveDelete($path) {
if (is_dir($path)) {
array_map('recursiveDelete', glob($path . '/*')) == rmdir($path);
} else {
unlink($path);
}
}
79.
ramzes (21.07.2023 / 12:53)
Titov, и в чем выгода? 9 лет прошло))
80.
Azzido (09.11.2023 / 21:46)
Titov, ну да, многие действия можно выполнить разными способами, эта тема была создана больше 10 лет назад, когда форум был оживлённый, и многие интересующиеся PHP часто задавали простейшие вопросы, поэтому сюда собирали некоторые интересные фрагменты когда, чтоб было на что ссылаться в примерах, многие сайтостроением занимались со смартфонов (которые, естественно, были не такие мощные как сейчас), и было трудно находить учебники и простую информацию.
Я, как куратор темы, просто редактировал куски кода, которые сюда кидали другие пользователи (кстати, в старых версиях движка не было возможности у кураторов редактировать чужие посты, только удалять, поэтому тут посты опубликованы от моей учётки, но писали их другие люди).
URL:
https://visavi.net/topics/380