Есть вопрос?
Зайди на форум

Поиск на сайте: Advanced

Denix - новый дистрибутив Linux. Русификация Ubuntu и установка кодеков

dkws.org.ua
Форум сайта dkws.org.ua
 
Главная    ТемыТемы    АльбомАльбом    РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Практика программирования

 
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP
 
Автор Сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13868
Откуда: Кировоград, Украина

СообщениеДобавлено: Ср Авг 23, 2006 12:03 pm    Заголовок сообщения: Практика программирования
Ответить с цитатой

В этот пост будут выкладываться готовые PHP-сценарии с объяснением, как они работают. Надеюсь, вам будет интересно ))

Последний раз редактировалось: den (Ср Авг 23, 2006 7:09 pm), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13868
Откуда: Кировоград, Украина

СообщениеДобавлено: Ср Авг 23, 2006 12:07 pm    Заголовок сообщения:
Ответить с цитатой

При программировании на PHP иногда возникает необходимость узнать дату создания файла. Если вы программируете в Linux, то проблем особых нет - можно использовать системный вызов stat() или функцию filectime(). Но в Windows вызов stat() не работает. Для получения даты пришлось немного поработать руками и получилась функция filedate(), возвращающая дату создания файла:

Код:
function filedate($f)
{
exec("dir /4 $f",$FD);
$C = $FD[5];
$C = substr($C, 0, 10);
return $C;
}


Пояснения:
$f - это имя файла
параметр /4 команды dir заставляет показывать год в 4-х значном режиме
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13868
Откуда: Кировоград, Украина

СообщениеДобавлено: Пт Авг 25, 2006 7:11 am    Заголовок сообщения:
Ответить с цитатой

KUBych (09:51:34 25/08/2006)
Денис, как реализовать загрузку ТОЛЬКО картинок на сервер?

dhsilabs (09:53:20 25/08/2006)
в сценарии проверяешь имя файла на сервере, если в ней присутствует строка .jpg .gif и т.д. то это картинка если нет - значит сообщение об ошибке

dhsilabs (09:53:26 25/08/2006)
это самый простой вариант

KUBych (09:53:51 25/08/2006)
нет. а там еще содержимое самого файла(внутренностей) как-то проверяется.

dhsilabs (09:53:52 25/08/2006)
более сложный - чтение заголовка файла и определение формата, если формат не подходит, значит это не картинка и сообщение об ошибке

KUBych (09:53:57 25/08/2006)
во-во!

dhsilabs (09:54:20 25/08/2006)
???? JFIF    ?? >CREATOR: gd-jpeg v1.0 (using IJG JPEG v62)

dhsilabs (09:54:33 25/08/2006)
если нет JFIF JPEG - это не JPG

dhsilabs (09:54:37 25/08/2006)
и т.д.

KUBych (09:54:47 25/08/2006)
Ясно.

dhsilabs (09:54:57 25/08/2006)
погодь

dhsilabs (09:56:21 25/08/2006)
есть функции ImageCreateFromPng, FromJpg, FromGIF

dhsilabs (09:56:59 25/08/2006)
берешь файл из /tmp который уже загрузили на сервер но ты пока еще не копировал его в галерею и проверяешь этими функциями, которые в случае ошибки возвращают пустую строку

dhsilabs (09:57:16 25/08/2006)
если ни один формат не подходит значит ошибка

dhsilabs (09:57:20 25/08/2006)
http://dkws.org.ua/index.php?page=show&file=a/php/gr-php

dhsilabs (09:57:23 25/08/2006)
http://www.softtime.ru/dic/id_dic=346&id_group=15

KUBych (09:58:47 25/08/2006)
А! Ага. Все. дошло до меня
Спасиб
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13868
Откуда: Кировоград, Украина

СообщениеДобавлено: Пт Авг 25, 2006 7:16 am    Заголовок сообщения:
Ответить с цитатой

Задание следующее. Имеется каталог d:\images. В нем только картинки. Много картинок. Очень много. Есть каталог d:\cd. Нужно написать сценарий, который подготовит картинки для записи на CD. Сценарий должен создать каталоги D:\CD\CD1, CD2, CD3 и т.д. В эти каталоги он должен напихать картинок из d:\images. При этом картинки должны быть отсортированы по дате, например, в каталог d:\CD\CD1\25_08_2006 должны быть помещены картинки, созданные 25 августа 2006 года. Также сценарий должен учитывать размер CD = 640 Мб.

Писалось все для буржуев, поэтому комменты на английском.

Код:
<?

// Date of creation of a file
// In Windows we can not use function filectime: $C = filetime($d);
// Let's receive therefore date of a file by other way
function filedate($f)
{
exec("dir /4 $f",$FD);
$C = $FD[5];
$C = substr($C, 0, 10);
return $C;
}


// ********************************************************

// Folder with imahes
$imgs = "D:\\images\\";

// CDs folder
$cds = "D:\\CD\\";

// CDs nubmer
if (file_exists('cdn.txt')) $cdn = join('',file('d:\cdn.txt'));
// if file cdn.txt is empty, then CDs number = 1
if (strlen($cdn)===0) $cdn=1;

// Max capacity of CD in bytes (640 M)
$max_cap = 640 * 1024 * 1024;

// Capacity of current disk
$cap = 0;

echo "Using images folder $imgs\n";
echo "Using CD folder $cds\n";
echo "CD# $cdn\n";

$dir = opendir($imgs);
chdir($imgs);

while ($d = readdir($dir))
{

if (($d==".") || ($d=="..")) continue;

  if (!file_exists($cds."CD$cdn\\"))
     {
       // Creating directory, if needed
       echo "Making directory CD$cdn in $cds\n"; 
       mkdir($cds."CD$cdn\\");
     }

// Date of the file
$C = filedate($d);
$date_dir= str_replace('.','_',$C);   // name of 'date' directory

$size = filesize($d);
// Comment next line for quiet mode
echo "\nMoving file $d size: $size date: $C";

if (!file_exists($cds."CD$cdn\\".$date_dir))
      {
       // Creating directory, if needed
       echo "\n\nMaking 'date' directory $date_dir\n"; 
       @mkdir($cds."CD$cdn\\".$date_dir);
     }

// Moving file to CDs
$src = "$imgs".$d;
$dest = $cds."CD$cdn\\".$date_dir."\\$d";

if (!file_exists($dest))
   if (!copy($src,$dest)) die("\nCannot to copy $src to $dest\n");

unlink($src);

$cap = $cap + $size;
if ($cap > $max_cap) {
   $cdn = $cdn + 1;  // inc cd nubmer
   $cap = 0;         // current capacity = 0
 
 }

}

// We remember number of a disk in cdn.txt
$fl = fopen('d:\cdn.txt','w');
fputs($fl,$cdn);
fclose($fl);

?>
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
КУБыч

Новенький


Зарегистрирован: 31.01.2006
Сообщения: 38
Откуда: 127.0.0.1

СообщениеДобавлено: Пт Авг 25, 2006 11:14 am    Заголовок сообщения:
Ответить с цитатой

Только что столкнулся с небольной проблемкой. Вдруг кому-то это тоже поможет:
Язык: PHP5
Проблема: gb2 + кириллица
Решение:
Я знал, что стандартно php кириллицу не поддерживает.
Поэтому с кириллицей лучше работать с использованием tty шрифтов, имеющих кириллитические символы.
Я, довольный, беру шрифт arialbd.tty(это полужирный arial) из каталога C:\Windows\Fonts и пишу небольшой скриптик(image.php):
Код:
   $im = imagecreate(80, 18); // разрешение будущего текста-картинки
   $grey = imagecolorallocate($im, 102,102,102); // серый цвет
   imagettftext($im, 8,0,8,13,$grey,getcwd()."/extended/arialbd.ttf", $text); // пишем текст на картинке
   
   Header("Content-type: image/png"); // ставим заголовок
   Imagepng($im); // возвращаем картинку
   ImageDestroy($im); // освобождаем память


и тут у меня всякая казя-базя на картинке.

Но я делаю рожу кирпичом и лезу в Интернет! Вот что я там(или здесь) нашел:
В PHP 5 функция imagettftext() воспринимает кодировку Unicode, но никак не Windows-1251.
Поэтому можно написать такую функцию прям в начале нашего скрипта(image.php):
Код:
function win2uni($s)
{
   $s = convert_cyr_string($s,'w','i'); // преобразование win1251 -> iso8859-5
   for ($result='', $i=0; $i<strlen($s); $i++) // преобразование iso8859-5 -> unicode:
   {
      $charcode = ord($s[$i]);
      $result .= ($charcode>175)?"&#".(1040+($charcode-176)).";":$s[$i];
    }
    return $result;
}


Мне это помогло. Теперь сижу довольный и работаю со скриптом так:
Код:
image.php?text=Нефик


Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Anderson

Завсегдатай


Зарегистрирован: 08.07.2006
Сообщения: 642
Откуда: localhost

СообщениеДобавлено: Пт Сен 08, 2006 1:56 pm    Заголовок сообщения:
Ответить с цитатой

Вот зазипованный сценарий с функцией, выводящей содержимое каталога со ВСЕМИ файлами и подпапками на любую глубину.
При выводе используются кпртинки.
Вызов функции:

Код:
include "tree.php";
tree(string $folder);


Использовал метод рекурсии. Посмотрите -- выглядит интересно Smile
Распакуйте в папку /tree/

http://www.filehosting.cc/file/7236/tree-Anderson-zip.html
_________________
ArchLinux + Enlightenment 17 (E17)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение anderson.dunai@gmail.com Моб. телефон ICQ Number
Silex




Зарегистрирован: 02.12.2010
Сообщения: 6
Откуда: Ульяновск

СообщениеДобавлено: Чт Dec 09, 2010 12:24 pm    Заголовок сообщения:
Ответить с цитатой

как передать параметры из одного сценария в другой?
в книге есть пример про голосования - 42 глава:

header("Location: poll_results.php?poll=$poll");

в примере всё нормально передается, у меня пишет ошибку
Код:
 Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\practice\header.php:30) in C:\xampp\htdocs\practice\test\test_process.php on line 92

код header.php:
Код:

<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=windows-1251">
<META http-equiv="Content-Language" content="ru">
<TITLE>Сайт обучения </TITLE>

</HEAD>
<BODY>

<H1 id="mn"><img border="0" src="images/church_1.jpg" width="65px" height="80px" alt="Сайт обучения " style="float: left; margin-right: 12px">Сайт обучения </H1>

<TABLE id="tab"><TR>
<TD id="tdl">

<?php
echo $au_info; //вывести либо авторизации форму либо кабинет
?>

<br>
<br>
<P><a href="index.php">Главная</a>
<P><a href="index.php?p=lec_1">Лекция 1</a>



<br><br><br><br>
<P><a href="index.php?p=primer_1">Cтатья из Ведомостей</a>
<P><a href="index.php?p=test">Тест</a>

<br><br><br><br>
<P><a href="index.php?p=guestbook">Гостевуха</a>
<?php
if ($auth_admin==1) {echo
'
<P><a href="index.php?p=gbadmin">Редакция гостевой книги</a>
';}
?>

</TD>


мой header()
Код:
  header("Location: ./index.php?p=test&id=$id");

может быть можно как-нибудь кроме header() передать управление другому сценарию? Smile без использования форм соответственно
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
олег алексеевич

Тысячник


Зарегистрирован: 18.01.2009
Сообщения: 1365
Откуда: ua Кропивницкий

СообщениеДобавлено: Чт Dec 09, 2010 2:13 pm    Заголовок сообщения:
Ответить с цитатой

Цитата:

$id"

SID ?
_________________
помощь в личку платно.Удалю вирус,шелл с сайта Джумла, Битрикс .
Создам плагин , модуль под заказ для VirtueMart , JoomShopping
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Silex




Зарегистрирован: 02.12.2010
Сообщения: 6
Откуда: Ульяновск

СообщениеДобавлено: Чт Dec 09, 2010 2:36 pm    Заголовок сообщения:
Ответить с цитатой

олег алексеевич писал(а):
Цитата:

$id"

SID ?

нет, другой параметр -номер вопроса.
то есть я получаю $id в test_process.php из формы, далее обрабатываю там и хочу передать новое значение другому сценарию.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
олег алексеевич

Тысячник


Зарегистрирован: 18.01.2009
Сообщения: 1365
Откуда: ua Кропивницкий

СообщениеДобавлено: Пт Dec 10, 2010 6:44 am    Заголовок сообщения:
Ответить с цитатой

Цитата:

и хочу передать новое значение другому сценарию.

так открывай/подключай другой скрипт пхп,и получай значение/параметр из test_process.php ,который может в массиве или записанным в таблицу.
_________________
помощь в личку платно.Удалю вирус,шелл с сайта Джумла, Битрикс .
Создам плагин , модуль под заказ для VirtueMart , JoomShopping
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Показать сообщения:   
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP Часовой пояс: GMT
Страница 1 из 1
 Главная страница сайта
 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
© Колисниченко Денис