Полезные функции РНР (1 пост)
1541
Кураторы темы:
Azzido
0
копирайт на картинку
1 вариант картинка на картинку:
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; } ?>
Изменил: Titov (24.03.2011 / 19:14)
0
Календарь. Скрипт на 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>"; ?>
0
Для того чтобы вывести календарь в российком формате, необходимо изменить только блок вывода 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 года.
0
Подсчёт числа строк в программном проекте
Код вызова функции scan_dir()
<?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); ?>
0
Подсветка синтаксиса кода на PHP
Пример скрипта вы видете в полезных кусках кода на этом форуме.
Добавлено через 02:37 сек.
Перевод русского текста в транслит
Пример скрипта вы видете в полезных кусках кода на этом форуме.
<?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; } ?>
Изменил: ZipeR (05.04.2011 / 14:50)
0
Оптимизировал функцию опубликованную Mackler aka Бородатый Одмин.
Код подсчёта общего размера файлов в папке (с вложенными папками):
Использование:
Получаем общий размер папки в БАЙТАХ.
Добавлено через 03:51 сек.
Оптимизировал функцию опубликованную 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/'); ?>
Изменил: Azzido (05.04.2011 / 23:28)
0
Постраничная навигация на файлах
Файл данных text.txt
Файл данных 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> "; } } } ?>
0
Вывод случайной цитаты(статьи).
<?php $quotes[] = 'Монета, упавшая на дно реки, может показаться рыбам подарком с неба. Что они будут делать с этим подарком?'; $quotes[] = 'Если увидишь нечто, к чему стоит приложить руку, поступи не так, как подсказывает разум, но как велит настроение.'; $quotes[] = 'Если то, что ты делаешь, трудно тебе - посмотри, нуждаешься ли ты в этом.'; $quotes[] = 'Возможно, твои ошибки - это то, что нужно Миру.'; $quotes[] = 'Всякий может ударить слабого, но только слабый хочет ударить слабого.'; srand ((double) microtime() * 1000000); $random_number = rand(0,count($quotes)-1); ?>Выводим на страницу:
<?php echo ($quotes[$random_number]); ?>
0
66. ZipeR, echo array_rand($quotes);
Добавлено через 09:57 сек.
Добавлено через 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>'; } ?>типа того
0
Снятие скриншота с 3gp видеоролика
Добавлено через 01:44 сек.
Анимация из видео
необходима поддержка ffmpeg
<?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
Для выполнения действия необходимо авторизоваться!