[подлежит удалению]
» PHP: Полезные (интересные и оригинальные) решения
// Ф-ция возвращает $_POST без пустых полей.
<?
function clean($arg)
{
return strlen(trim($arg));
}
$post = array_filter($_POST, 'clean');
?>
<?
function clean($arg)
{
return strlen(trim($arg));
}
$post = array_filter($_POST, 'clean');
?>
Друзья!
Нужна php4apache.dll (или php4apache-eapi.dll)
откомпиленая с опцией -DEAPI
для apache 1.3.33 и php 4.3.11
Может у кого есть?
Нужна php4apache.dll (или php4apache-eapi.dll)
откомпиленая с опцией -DEAPI
для apache 1.3.33 и php 4.3.11
Может у кого есть?
Народ подскажите "красивое" решение....
есть массив переменных в HTTP_POST_VARS
на форме около 22-х чекбоксов, не нажатый чекбокс неотправляется т.е. такой переменной нет в этоммассиве...., а послать такую переменную в случае не нажатого чекбокса все равно надо со значением false ( потому как если он нажат, то отправляется true ) я конечно понимаю что можно перебирать весь массив и если нет заданной переменной то создавать её со значением false. но это как то не красиво...
Спасибо.
есть массив переменных в HTTP_POST_VARS
на форме около 22-х чекбоксов, не нажатый чекбокс неотправляется т.е. такой переменной нет в этоммассиве...., а послать такую переменную в случае не нажатого чекбокса все равно надо со значением false ( потому как если он нажат, то отправляется true ) я конечно понимаю что можно перебирать весь массив и если нет заданной переменной то создавать её со значением false. но это как то не красиво...
Спасибо.
g00d:
if (isset($твоя переменная)) { $твоя переменная=true; } else {$твоя переменная=false; }
сорри за оффтоп, но помогать меня всем учили
if (isset($твоя переменная)) { $твоя переменная=true; } else {$твоя переменная=false; }
сорри за оффтоп, но помогать меня всем учили
g00d
если очень хочется - то сделай хидден поля для каждого чекбокса с тем же именем, но со значением false
если очень хочется - то сделай хидден поля для каждого чекбокса с тем же именем, но со значением false
очень все позновательно ...
я требую продолжения банкета.
я требую продолжения банкета.
Вот исходник который помогает защититься от спама, полную версию с примером качайте здесь.
Код:
<?php
/*===============================
Programed by Vitali
E-mail: Administrator@GeSoft.org
================================*/
session_start();
$ServerName = 'localhost';
$DBUserName = 'root';
$DBPassword = '';
$DBName = 'reg_user';
$SessionTable = 'sessionkey';
$ImageWidth = 100;
$ImageHeight = 45;
//Генерирую случайный ключ
function GetRandomKey() {
srand ((float) microtime() * 10000000);
return strtoupper(md5(uniqid(rand(),true)));
}
//Процедура выбирает случайный графический файл из заданного каталога,
//данное изображение будет использоваться как фон. Я дополнительно указал
//фильтр *.jpg
function LoadRandomPatern($Path) {
$FileList = array();
if ($Handle = opendir($Path)) {
while (false !== ($File = readdir($Handle))) {
if (($File !== '.')and($File !== '..')and(preg_match('/.+\.jpg/', $File))) {
array_push($FileList, $File);
}
}
closedir($Handle);
}
$Index = array_rand($FileList,1);
return @imagecreatefromjpeg($Path.$FileList[$Index]);
}
//Данная функция дает возможность выводить текст "Center" и если текст не
//помешается на изображении то она автоматом уменьшает размер шрифта
function ImageStringCentered($Picture,$Font,$Y,$Text,$Color) {
while (strlen($Text) * imagefontwidth($Font) > imagesx($Picture)) {
if ($Font > 1) {
$Font--;
} else {
break;
}
}
imagestring($Picture,$Font,imagesx($Picture) / 2 - strlen($Text) * imagefontwidth($Font) / 2,$Y,$Text,$Color);
}
//Здесь генерируется само изображение которое пользователь уведет
function CreateCodePicture() {
global $ImageWidth;
global $ImageHeight;
global $ID;
$Patern = LoadRandomPatern('patern\\');
$CodeImage = imagecreate($ImageWidth,$ImageHeight);
$TextColor = imagecolorallocate($CodeImage, 255, 255, 0);
imagecopyresized($CodeImage,$Patern,0,0,0,0,$ImageWidth+1,$ImageHeight+1,imagesx($Patern),imagesy($Patern));
ImageStringCentered($CodeImage, 4, 15, substr($ID, 0, 10), $TextColor);
return $CodeImage;
}
//Функция для сохранения номера сессии, ключа и даты
function SaveSessionKey() {
global $ServerName;
global $DBUserName;
global $DBPassword;
global $DBName;
global $SessionTable;
global $ID;
//Получаю номер данной сессии
$SessionID = session_id();
//Попытка подключится к серверу
if (!@mysql_connect($ServerName,$DBUserName,$DBPassword)) {
echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
exit;
}
//Попытка подключится к базе данных
if (!mysql_select_db($DBName)) {
echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
exit;
}
//Пытаюсь создать таблицу для хранения ключей. Если такова существует то ничего не делаю.
$CreateQuery = "
CREATE TABLE `$SessionTable` (
`ID` INT NOT NULL AUTO_INCREMENT,
`PHPID` VARCHAR(40) NOT NULL,
`SessionKey` VARCHAR(10) NOT NULL,
`Date` DATE NOT NULL,
PRIMARY KEY (`ID`)
);";
//Если ошибка не "Table '$SessionID' already exists"
if ((!mysql_query($CreateQuery))and(mysql_errno()!==1050)) {
echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
exit;
}
//Получаю все записи идентичные данной сессии (макс. одна, в том случае
//если пользователь запускает скрипт повторно или сделал refresh страницы)
$SelectQuery = "SELECT * FROM `$SessionTable` WHERE `PHPID`='$SessionID'";
if (!($SelectResult = mysql_query($SelectQuery))) {
echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
exit;
}
if (mysql_num_rows($SelectResult)>0) {
//Запись уже существует, значит обновляем значение ключа
$UpdateQuery = "UPDATE `$SessionTable` SET `SessionKey`='$ID' WHERE `PHPID`='$SessionID';";
if (!mysql_query($UpdateQuery)) {
echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b><br>';
exit;
}
} else {
//Запись пока не существует, значит добавляем значение ключа
$InsertQuery = "INSERT INTO `$SessionTable` (`ID`, `PHPID`, `SessionKey`, `Date`) VALUES
('', '$SessionID', '$ID', '".date('Y-m-j')."');";
if (!mysql_query($InsertQuery)) {
echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b><br>';
exit;
}
}
}
//Функция по проверке правильности ключа, есть ли ключ в базе
function IsTrueKey($SessionKey) {
global $ServerName;
global $DBUserName;
global $DBPassword;
global $DBName;
global $SessionTable;
//Получаю номер данной сессии
$SessionID = session_id();
$SessionKey = strtoupper($SessionKey);
//Попытка подключится к серверу
if (!@mysql_connect($ServerName,$DBUserName,$DBPassword)) {
echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
exit;
}
//Попытка подключится к базе данных
if (!mysql_select_db($DBName)) {
echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
exit;
}
//Получаю все записи идентичные данной сессии и ключу
$SelectQuery = "SELECT * FROM `$SessionTable` WHERE `PHPID`='$SessionID' AND `SessionKey`='$SessionKey'";
if (!($SelectResult = mysql_query($SelectQuery))) {
echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
exit;
}
if (mysql_num_rows($SelectResult)>0) {
return true;
} else {
return false;
}
}
//Проверка что должен делать скрипт, если указано что надо генерировать
//изображение то выводит в противном случае ничего не делает (нужно в том
//случае если скрипт вызывается с помощью include)
if ($_GET['op']=='pic') {
$ID = GetRandomKey();
SaveSessionKey();
header("Content-type: image/jpeg");
imagejpeg(CreateCodePicture());
}
?>
Код:
<?php
/*===============================
Programed by Vitali
E-mail: Administrator@GeSoft.org
================================*/
session_start();
$ServerName = 'localhost';
$DBUserName = 'root';
$DBPassword = '';
$DBName = 'reg_user';
$SessionTable = 'sessionkey';
$ImageWidth = 100;
$ImageHeight = 45;
//Генерирую случайный ключ
function GetRandomKey() {
srand ((float) microtime() * 10000000);
return strtoupper(md5(uniqid(rand(),true)));
}
//Процедура выбирает случайный графический файл из заданного каталога,
//данное изображение будет использоваться как фон. Я дополнительно указал
//фильтр *.jpg
function LoadRandomPatern($Path) {
$FileList = array();
if ($Handle = opendir($Path)) {
while (false !== ($File = readdir($Handle))) {
if (($File !== '.')and($File !== '..')and(preg_match('/.+\.jpg/', $File))) {
array_push($FileList, $File);
}
}
closedir($Handle);
}
$Index = array_rand($FileList,1);
return @imagecreatefromjpeg($Path.$FileList[$Index]);
}
//Данная функция дает возможность выводить текст "Center" и если текст не
//помешается на изображении то она автоматом уменьшает размер шрифта
function ImageStringCentered($Picture,$Font,$Y,$Text,$Color) {
while (strlen($Text) * imagefontwidth($Font) > imagesx($Picture)) {
if ($Font > 1) {
$Font--;
} else {
break;
}
}
imagestring($Picture,$Font,imagesx($Picture) / 2 - strlen($Text) * imagefontwidth($Font) / 2,$Y,$Text,$Color);
}
//Здесь генерируется само изображение которое пользователь уведет
function CreateCodePicture() {
global $ImageWidth;
global $ImageHeight;
global $ID;
$Patern = LoadRandomPatern('patern\\');
$CodeImage = imagecreate($ImageWidth,$ImageHeight);
$TextColor = imagecolorallocate($CodeImage, 255, 255, 0);
imagecopyresized($CodeImage,$Patern,0,0,0,0,$ImageWidth+1,$ImageHeight+1,imagesx($Patern),imagesy($Patern));
ImageStringCentered($CodeImage, 4, 15, substr($ID, 0, 10), $TextColor);
return $CodeImage;
}
//Функция для сохранения номера сессии, ключа и даты
function SaveSessionKey() {
global $ServerName;
global $DBUserName;
global $DBPassword;
global $DBName;
global $SessionTable;
global $ID;
//Получаю номер данной сессии
$SessionID = session_id();
//Попытка подключится к серверу
if (!@mysql_connect($ServerName,$DBUserName,$DBPassword)) {
echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
exit;
}
//Попытка подключится к базе данных
if (!mysql_select_db($DBName)) {
echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
exit;
}
//Пытаюсь создать таблицу для хранения ключей. Если такова существует то ничего не делаю.
$CreateQuery = "
CREATE TABLE `$SessionTable` (
`ID` INT NOT NULL AUTO_INCREMENT,
`PHPID` VARCHAR(40) NOT NULL,
`SessionKey` VARCHAR(10) NOT NULL,
`Date` DATE NOT NULL,
PRIMARY KEY (`ID`)
);";
//Если ошибка не "Table '$SessionID' already exists"
if ((!mysql_query($CreateQuery))and(mysql_errno()!==1050)) {
echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
exit;
}
//Получаю все записи идентичные данной сессии (макс. одна, в том случае
//если пользователь запускает скрипт повторно или сделал refresh страницы)
$SelectQuery = "SELECT * FROM `$SessionTable` WHERE `PHPID`='$SessionID'";
if (!($SelectResult = mysql_query($SelectQuery))) {
echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
exit;
}
if (mysql_num_rows($SelectResult)>0) {
//Запись уже существует, значит обновляем значение ключа
$UpdateQuery = "UPDATE `$SessionTable` SET `SessionKey`='$ID' WHERE `PHPID`='$SessionID';";
if (!mysql_query($UpdateQuery)) {
echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b><br>';
exit;
}
} else {
//Запись пока не существует, значит добавляем значение ключа
$InsertQuery = "INSERT INTO `$SessionTable` (`ID`, `PHPID`, `SessionKey`, `Date`) VALUES
('', '$SessionID', '$ID', '".date('Y-m-j')."');";
if (!mysql_query($InsertQuery)) {
echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b><br>';
exit;
}
}
}
//Функция по проверке правильности ключа, есть ли ключ в базе
function IsTrueKey($SessionKey) {
global $ServerName;
global $DBUserName;
global $DBPassword;
global $DBName;
global $SessionTable;
//Получаю номер данной сессии
$SessionID = session_id();
$SessionKey = strtoupper($SessionKey);
//Попытка подключится к серверу
if (!@mysql_connect($ServerName,$DBUserName,$DBPassword)) {
echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
exit;
}
//Попытка подключится к базе данных
if (!mysql_select_db($DBName)) {
echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
exit;
}
//Получаю все записи идентичные данной сессии и ключу
$SelectQuery = "SELECT * FROM `$SessionTable` WHERE `PHPID`='$SessionID' AND `SessionKey`='$SessionKey'";
if (!($SelectResult = mysql_query($SelectQuery))) {
echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
exit;
}
if (mysql_num_rows($SelectResult)>0) {
return true;
} else {
return false;
}
}
//Проверка что должен делать скрипт, если указано что надо генерировать
//изображение то выводит в противном случае ничего не делает (нужно в том
//случае если скрипт вызывается с помощью include)
if ($_GET['op']=='pic') {
$ID = GetRandomKey();
SaveSessionKey();
header("Content-type: image/jpeg");
imagejpeg(CreateCodePicture());
}
?>
Здравствуйте, уважаемые. Следующий вопрос:
хочу поставить скрипт на php (news blog 1.1-как то вроде этого называется) для
удобного добавления новостей и возможности для пользователей писать комментсы.
ЧИТАЕМ ШАПКУ И НАЗВАНИЕ ТЕМЫ!!!
хочу поставить скрипт на php (news blog 1.1-как то вроде этого называется) для
удобного добавления новостей и возможности для пользователей писать комментсы.
ЧИТАЕМ ШАПКУ И НАЗВАНИЕ ТЕМЫ!!!
Если было не пинайте - но вроде такого невстретил...
Для меня сие открытие было откровением!
Если в код до вывода хидеров и контента вписать такую строчку кода - то в результате размер страницы кардинально уменьшится...
Код: ob_start('ob_gzhandler');
Для меня сие открытие было откровением!
Если в код до вывода хидеров и контента вписать такую строчку кода - то в результате размер страницы кардинально уменьшится...
Код: ob_start('ob_gzhandler');
Тот класс что давали по поводу "рисования" таблиц как в phpMyAdmin, ну уж слишком здоровый =) Да и применение класса в этом случае не обязательно.
Написал свой, состоит из одной функции.
Код:
function display_table($table) {
$sql = "select * from $table";
$q = mysql_query($sql);
$total = mysql_num_fields($q);
$fields = mysql_num_rows($q);
echo "<table border=1><tr>";
for($i=0;$i<$total;$i++) {
echo "<td>" . mysql_field_name($q,$i) . "</td>";
}
echo "</tr>";
for($n=0;$n<$fields;$n++) {
echo "<tr>";
for ($k=0;$k<$total;$k++) {
echo "<td>" . mysql_result($q,$n,$k) . "</td>";
}
echo "</tr>";
}
}
Написал свой, состоит из одной функции.
Код:
function display_table($table) {
$sql = "select * from $table";
$q = mysql_query($sql);
$total = mysql_num_fields($q);
$fields = mysql_num_rows($q);
echo "<table border=1><tr>";
for($i=0;$i<$total;$i++) {
echo "<td>" . mysql_field_name($q,$i) . "</td>";
}
echo "</tr>";
for($n=0;$n<$fields;$n++) {
echo "<tr>";
for ($k=0;$k<$total;$k++) {
echo "<td>" . mysql_result($q,$n,$k) . "</td>";
}
echo "</tr>";
}
}
Есть такая идея: большинство спамерских писем имеют заголовки, в которых символы кириллицы стоят рядом с латинскими - чтобы сложнее было по автору или теме в фильтре заблокировать. А вот в нормальной почте так никто не пишет - значит если перебрать все комбинации и отфильтровать найденные псьма, можно избавиться если не от всего спама, так от большей его части.
Хочу реализовать на страничке обновление только определнной области. Например есть сайт, на нем небольшой логотип или кнопка помощи, при нажатии на него в небольшое по размерам место сайта загружался файл. Мой товарищь, говорит, что нужно использовать <?php include('header.php');?>. Тоесть делаем другую страничку по ссылке и грузим туда участки сайта. Я же хочу, чтобы не обновлялся весь сайт а только определнные области. Чтобы сам сайт как бы статичный оставался.
Как реализовывать???
Как реализовывать???
CYberMaster
епрст, выше глаза поднять не в состоянии, ЗДЕСЬ ВОПРОСЫ НЕ ЗАДАЮТ
используй HTML тег <frame> или <iframe>
епрст, выше глаза поднять не в состоянии, ЗДЕСЬ ВОПРОСЫ НЕ ЗАДАЮТ
используй HTML тег <frame> или <iframe>
Код:
<?php
if(!empty($_POST["ip"]))
{
$sock = fsockopen("whois.ripe.net", 43, $errno, $errstr);
if (!$sock)
{
echo("$errno($errstr)");
return;
}
else
{
fputs ($sock, $_POST["ip"]."\r\n");
while (!feof($sock))
{
echo (str_replace(":",": ", fgets ($sock, 128))."<br>");
}
}
fclose ($sock);
}
?>
chillz
Ну что за мания усложнять простые вещи... Скока раз сталкиваюсь все время прикалываюсь. Не прще ли немного будет поитав ман по SQL выяснить что бля получения полей есть замечательный запрос... и даже функции не надо
$res = mysql_query("show fields from table1");
echo "<table><tr>";
while($arr = mysql_fetch_array($res))
{
echo "<td>{$arr['Field']}</td>";
}
echo "</tr></table>";
Не правда ли все намного короче и проще?
Добавлено:
Цитата:
Прости пожалуйста за манеру разговаривать, Еще я хронической безграмотрстью страдаю...
Да. Кое чего не заметил.. Вывод данных из таблиц. =) Ночное время влияет так сказать.
сори за оффтоп... Хотя вывод данных из таблиц дописывается ровно в три строчки к моему скрипту... Поправь если я не прав =)
Ну что за мания усложнять простые вещи... Скока раз сталкиваюсь все время прикалываюсь. Не прще ли немного будет поитав ман по SQL выяснить что бля получения полей есть замечательный запрос... и даже функции не надо
$res = mysql_query("show fields from table1");
echo "<table><tr>";
while($arr = mysql_fetch_array($res))
{
echo "<td>{$arr['Field']}</td>";
}
echo "</tr></table>";
Не правда ли все намного короче и проще?
Добавлено:
Цитата:
Спокойнее, плиз. Тот вариант для любой таблицы без знания столбцов в ней. Аналогия, как и сказано, с myPHPadmin /Cheery/
ps: и толку от нее больше, чем от твоего примера.
Прости пожалуйста за манеру разговаривать, Еще я хронической безграмотрстью страдаю...
Да. Кое чего не заметил.. Вывод данных из таблиц. =) Ночное время влияет так сказать.
сори за оффтоп... Хотя вывод данных из таблиц дописывается ровно в три строчки к моему скрипту... Поправь если я не прав =)
Проблема:
импортировать 9мб SQL-скрипт (дамп MySQL), если обычными споcобами (загрузка через web-интерфейс phpMyAdmin, Backup cPanel) проблематично, особенно на модемемном соединении.
Решение
можно залить на ftp и попросить админов восстановить базу, но не факт, что вам помогут. Можно попробовать через MySQL клиент типа SQLyog, MySQL-Front и т.д., но опять же не факт, что это закончится благополучно...
Перепробовав все перечисленные способы, я выяснил, что основная проблема - непрерывная передача 9мб файла.
И решил написать простенькую утилиту на PHP, которая будет читать SQL-файл построчно, точнее покомандно: выбирает команду (ограниченную точкой-с-запятой, исполняет её, и так далее). То есть все операции происходят внутри сервера, без участия клиента. Скорость бешеная, 9мб SQL-скрипт за 5 секунд!!! Ессесно файлик должен лежать там же, где скрипт.
Минусы
занимает большое количество ресурсов сервера, весь файл читается в память. Можно усовершенствовать, читая из файлового только отдельные SQL-команды.
Код: <?php
mysql_connect("localhost", "login", "password");
mysql_select_db ("database");
if (!file_exists($fname)) die ("Файл $fname не существует!");
$fp = fopen ($fname, "r");
$buffer = fread($fp, filesize($fname));
fclose ($fp);
$prev = 0;
while ($next = strpos($buffer,";",$prev+1))
{
$i++;
$a = substr($buffer,$prev+1,$next-$prev);
mysql_query($a);
$prev = $next;
}
echo "Выполнено $i команд";
?>
импортировать 9мб SQL-скрипт (дамп MySQL), если обычными споcобами (загрузка через web-интерфейс phpMyAdmin, Backup cPanel) проблематично, особенно на модемемном соединении.
Решение
можно залить на ftp и попросить админов восстановить базу, но не факт, что вам помогут. Можно попробовать через MySQL клиент типа SQLyog, MySQL-Front и т.д., но опять же не факт, что это закончится благополучно...
Перепробовав все перечисленные способы, я выяснил, что основная проблема - непрерывная передача 9мб файла.
И решил написать простенькую утилиту на PHP, которая будет читать SQL-файл построчно, точнее покомандно: выбирает команду (ограниченную точкой-с-запятой, исполняет её, и так далее). То есть все операции происходят внутри сервера, без участия клиента. Скорость бешеная, 9мб SQL-скрипт за 5 секунд!!! Ессесно файлик должен лежать там же, где скрипт.
Минусы
занимает большое количество ресурсов сервера, весь файл читается в память. Можно усовершенствовать, читая из файлового только отдельные SQL-команды.
Код: <?php
mysql_connect("localhost", "login", "password");
mysql_select_db ("database");
if (!file_exists($fname)) die ("Файл $fname не существует!");
$fp = fopen ($fname, "r");
$buffer = fread($fp, filesize($fname));
fclose ($fp);
$prev = 0;
while ($next = strpos($buffer,";",$prev+1))
{
$i++;
$a = substr($buffer,$prev+1,$next-$prev);
mysql_query($a);
$prev = $next;
}
echo "Выполнено $i команд";
?>
foxweb
Хотел заметить, что такой вариант не отработает у тебя при встрече ; в самом запросе. Тогда он выполнит половину запроса до ; и естественно вернется ошибка.
Так же как и при дампе базы я бы просто лимитировал обьемы записываемые за одно обращение. Т.е. записал мегабайт в базу например пошел далее. И ресурсы такое меньше жрет...
Если exec на серваке не в бане тогда вообще пара строк нужна
exec("mysql -uusername -ppass") и т.п. )
Хотел заметить, что такой вариант не отработает у тебя при встрече ; в самом запросе. Тогда он выполнит половину запроса до ; и естественно вернется ошибка.
Так же как и при дампе базы я бы просто лимитировал обьемы записываемые за одно обращение. Т.е. записал мегабайт в базу например пошел далее. И ресурсы такое меньше жрет...
Если exec на серваке не в бане тогда вообще пара строк нужна
exec("mysql -uusername -ppass") и т.п. )
Да, всё вполне логично.
Я делал, что разбиение на запросы производилось не просто по ";", а по ";\n"
Хотя то же не очень универсально.
По поводу exec - отличная идея, но скрипт был написан прежде, чем разобрался с ней
Я делал, что разбиение на запросы производилось не просто по ";", а по ";\n"
Хотя то же не очень универсально.
По поводу exec - отличная идея, но скрипт был написан прежде, чем разобрался с ней
..вывод
<? phpinfo();
include("../class.Thumbnail.php");
$tn_image = new Thumbnail("sample.gif", 0, 0, 25);
$tn_image->show();
?>
<?
/*
* class.Thumbnail.php
*
* Copyright (C) 2001 Hidayet Dogan (hdogan@bilcag.net)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
class Thumbnail {
var $errmsg = "";
var $error = false;
var $format = "";
var $file = "";
var $max_width = 0;
var $max_height = 0;
var $percent = 0;
function Thumbnail($file, $max_width = 0, $max_height = 0, $percent = 0) {
if (!file_exists($file)) {
$this->errmsg = "File doesn't exists";
$this->error = true;
}
else if (!is_readable($file)) {
$this->errmsg = "File is not readable";
$this->error = true;
}
if (strstr(strtolower($file), ".gif"))
$this->format = "GIF";
else if (strstr(strtolower($file), ".jpg") ||
strstr(strtolower($file), ".jpeg"))
$this->format = "JPEG";
else if (strstr(strtolower($file), ".png"))
$this->format = "PNG";
else {
$this->errmsg = "Unknown file format";
$this->error = true;
}
if ($max_width == 0 && $max_height == 0 && $percent == 0)
$percent = 100;
$this->max_width = $max_width;
$this->max_height = $max_height;
$this->percent = $percent;
$this->file = $file;
}
function calc_width($width, $height) {
$new_width = $this->max_width;
$new_wp = (100 * $new_width) / $width;
$new_height = ($height * $new_wp) / 100;
return array($new_width, $new_height);
}
function calc_height($width, $height) {
$new_height = $this->max_height;
$new_hp = (100 * $new_height) / $height;
$new_width = ($width * $new_hp) / 100;
return array($new_width, $new_height);
}
function calc_percent($width, $height) {
$new_width = ($width * $this->percent) / 100;
$new_height = ($height * $this->percent) / 100;
return array($new_width, $new_height);
}
function return_value($array) {
$array[0] = intval($array[0]);
$array[1] = intval($array[1]);
return $array;
}
function calc_image_size($width, $height) {
$new_size = array($width, $height);
if ($this->max_width > 0) {
$new_size = $this->calc_width($width, $height);
if ($this->max_height > 0) {
if ($new_size[1] > $this->max_height)
$new_size = $this->calc_height($new_size[0], $new_size[1]);
}
return $this->return_value($new_size);
}
if ($this->max_height > 0) {
$new_size = $this->calc_height($width, $height);
return $this->return_value($new_size);
}
if ($this->percent > 0) {
$new_size = $this->calc_percent($width, $height);
return $this->return_value($new_size);
}
}
function show_error_image() {
header("Content-type: image/png");
$err_img = ImageCreate(220, 25);
$bg_color = ImageColorAllocate($err_img, 0, 0, 0);
$fg_color1 = ImageColorAllocate($err_img, 255, 255, 255);
$fg_color2 = ImageColorAllocate($err_img, 255, 0, 0);
ImageString($err_img, 3, 6, 6, "ERROR:", $fg_color2);
ImageString($err_img, 3, 55, 6, $this->errmsg, $fg_color1);
ImagePng($err_img);
ImageDestroy($err_img);
}
function show() {
if ($this->error) {
$this->show_error_image();
return;
}
$size = GetImageSize($this->file);
$new_size = $this->calc_image_size($size[0], $size[1]);
$new_image = ImageCreate($new_size[0], $new_size[1]);
switch ($this->format) {
case "GIF":
$old_image = ImageCreateFromGif($this->file);
break;
case "JPEG":
$old_image = ImageCreateFromJpeg($this->file);
break;
case "PNG":
$old_image = ImageCreateFromPng($this->file);
break;
}
ImageCopyResized($new_image, $old_image, 0, 0, 0, 0, $new_size[0], $new_size[1], $size[0], $size[1]);
switch ($this->format) {
case "GIF":
header("Content-type: image/gif");
ImageGif($new_image);
break;
case "JPEG":
header("Content-type: image/jpeg");
ImageJpeg($new_image);
break;
case "PNG":
header("Content-type: image/png");
ImagePng($new_image);
break;
}
ImageDestroy($new_image);
ImageDestroy($old_image);
return;
}
}
?>
клысс для генерации тумб
<? phpinfo();
include("../class.Thumbnail.php");
$tn_image = new Thumbnail("sample.gif", 0, 0, 25);
$tn_image->show();
?>
<?
/*
* class.Thumbnail.php
*
* Copyright (C) 2001 Hidayet Dogan (hdogan@bilcag.net)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
class Thumbnail {
var $errmsg = "";
var $error = false;
var $format = "";
var $file = "";
var $max_width = 0;
var $max_height = 0;
var $percent = 0;
function Thumbnail($file, $max_width = 0, $max_height = 0, $percent = 0) {
if (!file_exists($file)) {
$this->errmsg = "File doesn't exists";
$this->error = true;
}
else if (!is_readable($file)) {
$this->errmsg = "File is not readable";
$this->error = true;
}
if (strstr(strtolower($file), ".gif"))
$this->format = "GIF";
else if (strstr(strtolower($file), ".jpg") ||
strstr(strtolower($file), ".jpeg"))
$this->format = "JPEG";
else if (strstr(strtolower($file), ".png"))
$this->format = "PNG";
else {
$this->errmsg = "Unknown file format";
$this->error = true;
}
if ($max_width == 0 && $max_height == 0 && $percent == 0)
$percent = 100;
$this->max_width = $max_width;
$this->max_height = $max_height;
$this->percent = $percent;
$this->file = $file;
}
function calc_width($width, $height) {
$new_width = $this->max_width;
$new_wp = (100 * $new_width) / $width;
$new_height = ($height * $new_wp) / 100;
return array($new_width, $new_height);
}
function calc_height($width, $height) {
$new_height = $this->max_height;
$new_hp = (100 * $new_height) / $height;
$new_width = ($width * $new_hp) / 100;
return array($new_width, $new_height);
}
function calc_percent($width, $height) {
$new_width = ($width * $this->percent) / 100;
$new_height = ($height * $this->percent) / 100;
return array($new_width, $new_height);
}
function return_value($array) {
$array[0] = intval($array[0]);
$array[1] = intval($array[1]);
return $array;
}
function calc_image_size($width, $height) {
$new_size = array($width, $height);
if ($this->max_width > 0) {
$new_size = $this->calc_width($width, $height);
if ($this->max_height > 0) {
if ($new_size[1] > $this->max_height)
$new_size = $this->calc_height($new_size[0], $new_size[1]);
}
return $this->return_value($new_size);
}
if ($this->max_height > 0) {
$new_size = $this->calc_height($width, $height);
return $this->return_value($new_size);
}
if ($this->percent > 0) {
$new_size = $this->calc_percent($width, $height);
return $this->return_value($new_size);
}
}
function show_error_image() {
header("Content-type: image/png");
$err_img = ImageCreate(220, 25);
$bg_color = ImageColorAllocate($err_img, 0, 0, 0);
$fg_color1 = ImageColorAllocate($err_img, 255, 255, 255);
$fg_color2 = ImageColorAllocate($err_img, 255, 0, 0);
ImageString($err_img, 3, 6, 6, "ERROR:", $fg_color2);
ImageString($err_img, 3, 55, 6, $this->errmsg, $fg_color1);
ImagePng($err_img);
ImageDestroy($err_img);
}
function show() {
if ($this->error) {
$this->show_error_image();
return;
}
$size = GetImageSize($this->file);
$new_size = $this->calc_image_size($size[0], $size[1]);
$new_image = ImageCreate($new_size[0], $new_size[1]);
switch ($this->format) {
case "GIF":
$old_image = ImageCreateFromGif($this->file);
break;
case "JPEG":
$old_image = ImageCreateFromJpeg($this->file);
break;
case "PNG":
$old_image = ImageCreateFromPng($this->file);
break;
}
ImageCopyResized($new_image, $old_image, 0, 0, 0, 0, $new_size[0], $new_size[1], $size[0], $size[1]);
switch ($this->format) {
case "GIF":
header("Content-type: image/gif");
ImageGif($new_image);
break;
case "JPEG":
header("Content-type: image/jpeg");
ImageJpeg($new_image);
break;
case "PNG":
header("Content-type: image/png");
ImagePng($new_image);
break;
}
ImageDestroy($new_image);
ImageDestroy($old_image);
return;
}
}
?>
клысс для генерации тумб
Я решил чет сам написать и прошу вашей помощи!! Проблема и задача такова!
Маленький скриптик добавления в БД запись фильма и т.д. и т.п.
--1--add.php
<html>
<head><title>add_film</title></head>
<body bgcolor=#e9e9e9>
<center><h1>????????</h1></center>
<form method="post" action="insert_bd.php">
<table border=1>
<tr><td>Название фильма</td><td><input type="text" name="film" size="45"><br></td>
<tr><td>Актер</td><td><input type="text" name="akter" size="45"><br></td>
<tr><td>Жанр</td><td><input type="text" name="ganr" size="45"><br></td>
<tr><td>Размер</td><td><input type="text" name="size" size="45"><br></td>
</tr>
</table>
<br>
<input type="submit" name="add" size="15"><br>
<br>
</form>
<a href=.\index.php>Go BacK</a>
</body>
</html>
--2--insert_bd.php
<?php
$film = "film";
$akter = "akter";
$ganr = "ganr";
$size = "size";
$link = mysql_connect("localhost", "film", "film") or
die("Could not connect: " . mysql_error());
mysql_select_db("film");
$query = "insert into bd_films values ('".$film."', '".$akter."', '".$ganr."', '".$size."')";
$result = mysql_query($query);
printf ("Last inserted record has id %d\n", mysql_insert_id());
mysql_close($link);
?>
Бд создана! все ок !! А добавлять не хочет!! НЕ найду ошибку !Помагите плз)))Де то ,что то не написал!
Маленький скриптик добавления в БД запись фильма и т.д. и т.п.
--1--add.php
<html>
<head><title>add_film</title></head>
<body bgcolor=#e9e9e9>
<center><h1>????????</h1></center>
<form method="post" action="insert_bd.php">
<table border=1>
<tr><td>Название фильма</td><td><input type="text" name="film" size="45"><br></td>
<tr><td>Актер</td><td><input type="text" name="akter" size="45"><br></td>
<tr><td>Жанр</td><td><input type="text" name="ganr" size="45"><br></td>
<tr><td>Размер</td><td><input type="text" name="size" size="45"><br></td>
</tr>
</table>
<br>
<input type="submit" name="add" size="15"><br>
<br>
</form>
<a href=.\index.php>Go BacK</a>
</body>
</html>
--2--insert_bd.php
<?php
$film = "film";
$akter = "akter";
$ganr = "ganr";
$size = "size";
$link = mysql_connect("localhost", "film", "film") or
die("Could not connect: " . mysql_error());
mysql_select_db("film");
$query = "insert into bd_films values ('".$film."', '".$akter."', '".$ganr."', '".$size."')";
$result = mysql_query($query);
printf ("Last inserted record has id %d\n", mysql_insert_id());
mysql_close($link);
?>
Бд создана! все ок !! А добавлять не хочет!! НЕ найду ошибку !Помагите плз)))Де то ,что то не написал!
$film = "film";
на
$film = $_POST['film'];
и так все...
только щас в лоб дадут... за вопрос не в теме.... и мне тоже..
на
$film = $_POST['film'];
и так все...
только щас в лоб дадут... за вопрос не в теме.... и мне тоже..
Если register_globals= Off:
Код:
$hash= $HTTP_GET_VARS;
foreach ($hash as $key=>$value){
$$key= $value;
}
Код:
$hash= $HTTP_GET_VARS;
foreach ($hash as $key=>$value){
$$key= $value;
}
Удалено.
Не раз сталкивался с проблемой, что надо скачать все фотки с галереи где фотки можно открыть как, например, здесь http://people.freenet.de/leah01/1.jpg
Написал в результате простенький скрипт который это делает. Скрипт сырой, но может кому-нибудь сэкономит 20 минут времени. Кстати, если кто знает как добиться вывода сообщений в процессе его работы, а не по его завершению - киньте совет на мыло zergussino [собака] mail.ru
<?
set_time_limit(0);
function wwwcopy($file,$nfile)
{
echo "Читаем <b>".addslashes($file)."</b> ...<br />";
$fp = @fopen($file,"rb");
while(!feof($fp))
{
$cont.= fread($fp,1024);
}
fclose($fp);
echo "Пишем <b>".addslashes($nfile)."</b> ...<br />";
$fp2 = @fopen($nfile,"w");
fwrite($fp2,$cont);
fclose($fp2);
}
$server_name = 'http://урл_хоста/';
$local_directory = "C:/локальная_директория/";
$file_template = '%s.jpg';
for ($i=$_GET['start'];$i<$_GET['end'];$i++){
wwwcopy($server_name.sprintf($file_template, $i), $local_directory.sprintf($file_template, $i));
}
?>
Написал в результате простенький скрипт который это делает. Скрипт сырой, но может кому-нибудь сэкономит 20 минут времени. Кстати, если кто знает как добиться вывода сообщений в процессе его работы, а не по его завершению - киньте совет на мыло zergussino [собака] mail.ru
<?
set_time_limit(0);
function wwwcopy($file,$nfile)
{
echo "Читаем <b>".addslashes($file)."</b> ...<br />";
$fp = @fopen($file,"rb");
while(!feof($fp))
{
$cont.= fread($fp,1024);
}
fclose($fp);
echo "Пишем <b>".addslashes($nfile)."</b> ...<br />";
$fp2 = @fopen($nfile,"w");
fwrite($fp2,$cont);
fclose($fp2);
}
$server_name = 'http://урл_хоста/';
$local_directory = "C:/локальная_директория/";
$file_template = '%s.jpg';
for ($i=$_GET['start'];$i<$_GET['end'];$i++){
wwwcopy($server_name.sprintf($file_template, $i), $local_directory.sprintf($file_template, $i));
}
?>
Столкнулся с задачей динамической подгрузки контента на страницу (длиннющие списки).
Решил ее следующим образом:
На странице:
Код: <script>
function findObj(id) {
if(document.all)
return document.all[id];
else
return document.getElementById(id);
}
function branch(id) {
e=findObj('s'+id);
if (!e) return;
e.innerHTML="<b>Подождите, идет загрузка...</b>";
e.style.display='block';
e=findObj('loader');
if (!e) return;
e.src="branch.php?id="+id;
}
</script>
<span onClick="javascript:branch(1);">Первый</span><br>
<span id="s1" style="display:none; padding-left:20px;"> </span>
<span onClick="javascript:branch(2);">Второй</span><br>
<span id="s2" style="display:none; padding-left:20px;"> </span>
<span onClick="javascript:branch(3);">Третий</span><br>
<span id="s3" style="display:none; padding-left:20px;"> </span>
<iframe id="loader" src="about:blank" vspace="0" hspace="0" marginwidth="0" marginheight="0" frameborder="0" height="0" scrolling="no" width="0"></iframe>
Решил ее следующим образом:
На странице:
Код: <script>
function findObj(id) {
if(document.all)
return document.all[id];
else
return document.getElementById(id);
}
function branch(id) {
e=findObj('s'+id);
if (!e) return;
e.innerHTML="<b>Подождите, идет загрузка...</b>";
e.style.display='block';
e=findObj('loader');
if (!e) return;
e.src="branch.php?id="+id;
}
</script>
<span onClick="javascript:branch(1);">Первый</span><br>
<span id="s1" style="display:none; padding-left:20px;"> </span>
<span onClick="javascript:branch(2);">Второй</span><br>
<span id="s2" style="display:none; padding-left:20px;"> </span>
<span onClick="javascript:branch(3);">Третий</span><br>
<span id="s3" style="display:none; padding-left:20px;"> </span>
<iframe id="loader" src="about:blank" vspace="0" hspace="0" marginwidth="0" marginheight="0" frameborder="0" height="0" scrolling="no" width="0"></iframe>
Способ генерации случайного числа (или даже последовательности случайных чисел) неменяющимся в течении определенного времени (час, 2, сутки... любого).
Код: <?
$REGEN_TIME = 3600*24*1; //Время в течении которого пследовательность случайных чисел не должна меняться в секундах.
srand(floor(time()/$REGEN_TIME));
?>
Код: <?
$REGEN_TIME = 3600*24*1; //Время в течении которого пследовательность случайных чисел не должна меняться в секундах.
srand(floor(time()/$REGEN_TIME));
?>
Народ, помогите, плз...
У меня два вопроса, выручайте
У меня два вопроса, выручайте
к вопросу о классе Thumbnails, линк на оригинал
http://www.hido.net/projects/phpThumbnailer/
также хочу поделиться очень замечательным классом для работы с XML документами.
MiniXML
http://minixml.psychogenic.com/index.html
на сайте предоставлена вся API документация.
Добавлено:
2Cheery
Добавлено:
ну и раз пошла волна, то еще добавлю от себя:
небольшой код, который вырезает из выходного HTML скрипта все лишние пробелы, табуляции и HTML комментарии. Просто поместитие это в начало скрипта, правда включается буферизация вывода.
Код:
function callback ($buffer) {
//Отсекаем лишнее
$patterns = array ( "/<!--.{0,}-->/", "/<!--.{0,}-->/", "/ {2,}/", "/\t{1,}/", "/\r\n/", "/^\s{1,}/m");
$replaces = array ( "", "", " ", " ", "\n", "");
//Возвращаем буфер
return( preg_replace ($patterns, $replaces, $buffer ) );
}
//Буферизация вывода
ob_start("callback");
http://www.hido.net/projects/phpThumbnailer/
также хочу поделиться очень замечательным классом для работы с XML документами.
MiniXML
http://minixml.psychogenic.com/index.html
на сайте предоставлена вся API документация.
Добавлено:
2Cheery
Добавлено:
ну и раз пошла волна, то еще добавлю от себя:
небольшой код, который вырезает из выходного HTML скрипта все лишние пробелы, табуляции и HTML комментарии. Просто поместитие это в начало скрипта, правда включается буферизация вывода.
Код:
function callback ($buffer) {
//Отсекаем лишнее
$patterns = array ( "/<!--.{0,}-->/", "/<!--.{0,}-->/", "/ {2,}/", "/\t{1,}/", "/\r\n/", "/^\s{1,}/m");
$replaces = array ( "", "", " ", " ", "\n", "");
//Возвращаем буфер
return( preg_replace ($patterns, $replaces, $buffer ) );
}
//Буферизация вывода
ob_start("callback");
Ternik, если бы твой скрипт ещё и скрипты со стилями не трогал, то цены бы ему не было
Предыдущая тема: Perl: Полезные решения
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.