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

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


Персональный статус
0
копирайт на картинку
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>&nbsp;</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>&nbsp;</td>";
    }
    echo "</tr>";
  } 
  echo "</table>";
?>
Для того чтобы вывести календарь на произвольный месяц, достаточно передать в качестве второго параметра функции date() любую дату месяца в виде числа секунд, прошедших с полуночи 1 января 1970 года.

[̲̅$̲̅(̲̅ιοο̲̅)̲̅$̲̅
0
Подсчёт числа строк в программном проекте
<?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
Пример скрипта вы видете в полезных кусках кода на этом форуме.
<?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)
A

Оранжевые штаны
0
Оптимизировал функцию опубликованную 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
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."]&nbsp;";
      }
      else
      {
        echo "<a href='$_SERVER[PHP_SELF]?page=$i'>[".
             (($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</a>&nbsp;";
      }
    }
    // Если это последняя страница заменяем последнюю цифру 
    // максимальным числом позиций в массиве $temp
    else
    {
      if($page == $i)
      {
        echo "[".(($i - 1)*$pnumber + 1)."-".($total - 1)."]&nbsp;";
      }
      else
      {
        echo "<a href='$_SERVER[PHP_SELF]?page=$i'>[".
             (($i - 1)*$pnumber + 1)."-".($total - 1)."]</a>&nbsp;";
      }
    }
  }
?>

[̲̅$̲̅(̲̅ιοο̲̅)̲̅$̲̅
0
Вывод случайной цитаты(статьи).
<?php
  $quotes[] = 'Монета, упавшая на дно реки, может показаться рыбам подарком с неба. Что они будут делать с этим подарком?';
    $quotes[] = 'Если увидишь нечто, к чему стоит приложить руку, поступи не так, как подсказывает разум, но как велит настроение.';
    $quotes[] = 'Если то, что ты делаешь, трудно тебе - посмотри, нуждаешься ли ты в этом.';
    $quotes[] = 'Возможно, твои ошибки - это то, что нужно Миру.';
    $quotes[] = 'Всякий может ударить слабого, но только слабый хочет ударить слабого.';
 srand ((double) microtime() * 1000000);
    $random_number = rand(0,count($quotes)-1);
 ?>
Выводим на страницу:
<?php
 echo ($quotes[$random_number]);
?>

2000 лет д.н.э.
0
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).'&amp;'.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&amp;'.SID.'">1</a><span class="navithis">&larr;</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.'&amp;'.SID.'">'.$ii.'</a>'; }}
$i=$i+$step; }
if($asd2<$total){ $return.='<span class="navithis">&rarr;</span><a href="'.$self.'page='.$ba2.'&amp;'.SID.'">'.$ba.'</a>'; }}

if($total > $page + $step){ $return.='<a href="'.$self.'page='.($page + $step).'&amp;'.SID.'"><b>»</b></a>';
}else{ $return.='<span class="navithis">»</span>'; } // назад
return '<div class="navi">'.$return.'</div>';
}


?>
типа того

[̲̅$̲̅(̲̅ιοο̲̅)̲̅$̲̅
0
Снятие скриншота с 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
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск