Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Уменьшение фотографии
 
 автор: Dizels   (21.07.2008 в 19:13)   письмо автору
 
 

файл addnews.php:

<?php
  
  
// Выставляем уровень обработки ошибок
  
Error_Reporting(E_ALL & ~E_NOTICE); 

  
// Устнавливаем соединение с базой данных
  
include "config.php";

  
// Проверим - достаточно ли информации для занесения в базу данных
  
if(empty($_POST['title'])) links("Отсутствует title");
  if(empty(
$_POST['keywords'])) links("Отсутствует keywords");
  if(empty(
$_POST['description'])) links("Отсутствует description");
  if(empty(
$_POST['tegs'])) links("Отсутствует теги");
  if(empty(
$_POST['name'])) links("Отсутствует заголовок");
  if(empty(
$_POST['body'])) links("Содержание не введено");
  if(empty(
$_POST['url_text']) && !empty($_POST['url'])) $_POST['url_text'] = $_POST['url'];
  
// Определяем, скрыта новоть или нет
  
if($_POST['hide'] == "on"$showhide "show";
  else 
$showhide "hide";
  
// Добавляем протокол в url, если пользователь забыл это сделать сам
  
$_POST['url'] = strtr($_POST['url'], "HTTP""http");
  if (!empty(
$_POST['url'])) { 
    if (
strtolower((substr($_POST['url'], 07))!="http://") && (strtolower(substr($_POST['url'], 07))!="ftp://")) $url="http://".$_POST['url'];
  } 
  
// Проверяем время
  
if(!preg_match("|^[\d]+$|",$_POST['date_year'])) puterror("Ошибка при обращении к блоку новостей");
  if(!
preg_match("|^[\d]+$|",$_POST['date_month'])) puterror("Ошибка при обращении к блоку новостей");
  if(!
preg_match("|^[\d]+$|",$_POST['date_day'])) puterror("Ошибка при обращении к блоку новостей");
  if(!
preg_match("|^[\d]+$|",$_POST['date_hour'])) puterror("Ошибка при обращении к блоку новостей");
  if(!
preg_match("|^[\d]+$|",$_POST['date_minute'])) puterror("Ошибка при обращении к блоку новостей");

  
// Заменяем одинарные кавычки обратными, чтобы избежать конфликта
  // при добавлении информации в таблицу
  
if (!get_magic_quotes_gpc())
  {
    
$_POST['title'] = mysql_escape_string($_POST['title']);
    
$_POST['keywords'] = mysql_escape_string($_POST['keywords']);
    
$_POST['description'] = mysql_escape_string($_POST['description']);
    
$_POST['tegs'] = mysql_escape_string($_POST['tegs']);
    
$_POST['name'] = mysql_escape_string($_POST['name']);
    
$_POST['body'] = mysql_escape_string($_POST['body']);
  }

  
// Если поле выбора картинки не пустое - закачиваем её на сервер
  
$path "";
  
// Если требуется загрузить файл - загружаем
  
if($_POST['chk_filename'] == "on")
  {
    if (!empty(
$_FILES['filename']['tmp_name']))
    {
      
// Формируем путь к файлу    
      
$path "../files_news/".date("YmdHis",time());
      
// Если оператор пожелал переименовать файл - переименовываем 
      
if($_POST['chk_rename'] == "on")
      {
        
// Проверяем, чтобы не было прямых и обратных слешей
        
$_POST['rename'] = str_replace("\\","",$_POST['rename']);
        
$_POST['rename'] = str_replace("/","",$_POST['rename']);
        
$_POST['rename'] = stripcslashes($_POST['rename']);
        
$path "files/".substr($_POST['rename'], 0strrpos($_POST['rename'], ".")); 
      }
      
      
// Проверяем, не является ли файл скриптом PHP или Perl, html, если это так преобразуем его в формат .txt
      
$extentions = array("#\.php#is",
                          
"#\.phtml#is",
                          
"#\.php3#is",
                          
"#\.html#is",
                          
"#\.htm#is",
                          
"#\.hta#is",
                          
"#\.pl#is",
                          
"#\.xml#is",
                          
"#\.inc#is",
                          
"#\.shtml#is"
                          
"#\.xht#is"
                          
"#\.xhtml#is");
      
// Извлекаем из имени файла расширение
      
$ext strrchr($_FILES['filename']['name'], "."); 
      
$add $ext;
      foreach(
$extentions AS $exten
      {
        if(
preg_match($exten$ext)) $add ".txt"
      }
      
$path .= $add
  
      
// Перемещаем файл из временной директории сервера в
      // директорию /files Web-приложения
      
if (copy($_FILES['filename']['tmp_name'], "../".$path))
      {
        
// Уничтожаем файл во временной директории
        
@unlink($_FILES['filename']['tmp_name']);
        
// Изменяем права доступа к файлу
        
@chmod("../".$path0644);
      }
    }
    else 
links("Не указан файл для загрузки");
  } 
  include(
"function.php");
  
    
// Вызываем функцию resizeimg(), создающую уменьшенную копию фотографии
  // $image и помещающую её в файл $smallimage
  
if(!resizeimg($path$smallimage133100))
  {
    
links($_POST['id_catalog'],
          
"Ошибка при создании уменьшенной копии изображения с
           помощью библиотеки GDLib"
);
  }

  
// Формируем и выполняем SQL-запрос на добавление новости
  
$query "INSERT INTO seo_news VALUES (0,
                                     '"
.$_POST['title']."',
                                     '"
.$_POST['keywords']."',
                                     '"
.$_POST['description']."',
                                     '"
.$_POST['tegs']."',
                                     '"
.$_POST['name']."',
                                     '"
.$_POST['body']."',
                                     '"
.$_POST['date_year']."-".$_POST['date_month']."-".$_POST['date_day']." ".sprintf("%02d",$_POST['date_hour']).":".sprintf("%02d",$_POST['date_minute']).":00',
                                     '"
.$_POST['url']."',
                                     '"
.$_POST['url_text']."',
                                     '
$path',
                                     '"
.$_POST['category']."',
                                     '
$showhide');";
  if(
mysql_query($query)) header("Location: index.php?page=".$_GET['page']);
  else 
links("Ошибка при добавлении новостной позиции");

  
// Вспомогательная функция для вывода ссылок возврата
  
function links($msg)
  {
    echo 
"<p>".$msg."</p>";
    echo 
"<p><a href=# onClick='history.back()'>Вернуться к правке новостей</a></p>";
    echo 
"<p><a href=index.php>Администрирование новостей</a></p>";
    exit();
  }
?>

файл function.php:

<?
  
function resizeimg($filename$smallimage$w$h)
  {
    
// Имя файла с масштабируемым изображением
    
$filename "../".$filename;
    
// Имя файла с уменьшенной копией.
    
$smallimage "../".$smallimage;    
    
// определим коэффициент сжатия изображения, которое будем генерить
    
$ratio $w/$h;
    
// получим размеры исходного изображения
    
$size_img getimagesize($filename);
    
// Если размеры меньше, то масштабирования не нужно
    
if (($size_img[0]<$w) && ($size_img[1]<$h)) return true;
    
// получим коэффициент сжатия исходного изображения
    
$src_ratio=$size_img[0]/$size_img[1];

    
// Здесь вычисляем размеры уменьшенной копии, чтобы при масштабировании сохранились 
    // пропорции исходного изображения
    
if ($ratio<$src_ratio)
    {
      
$h $w/$src_ratio;
    }
    else
    {
      
$w $h*$src_ratio;
    }
    
// создадим пустое изображение по заданным размерам 
    
$dest_img imagecreatetruecolor($w$h);  
    
$white imagecolorallocate($dest_img255255255);       
    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); 

    
// масштабируем изображение     функцией imagecopyresampled()
    // $dest_img - уменьшенная копия
    // $src_img - исходной изображение
    // $w - ширина уменьшенной копии
    // $h - высота уменьшенной копии        
    // $size_img[0] - ширина исходного изображения
    // $size_img[1] - высота исходного изображения
    
imagecopyresampled($dest_img$src_img0000$w$h$size_img[0], $size_img[1]);                
    
// сохраняем уменьшенную копию в файл 
    
if ($size_img[2]==2)  imagejpeg($dest_img$smallimage);                      
    else if (
$size_img[2]==1imagegif($dest_img$smallimage);                      
    else if (
$size_img[2]==3imagepng($dest_img$smallimage); 
    
// чистим память от созданных изображений
    
imagedestroy($dest_img);
    
imagedestroy($src_img);
    return 
true;         
  }  
?> 

Выдает ошибки:
Warning: imagejpeg() [function.imagejpeg]: Unable to open '../' for writing: No such file or directory in Z:\home\domen.ru\www\admin\seo-news\function.php on line 43

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\domen.ru\www\admin\seo-news\function.php:51) in Z:\home\domen.ru\www\admin\seo-news\addnews.php on line 122

   
 
 автор: Dizels   (21.07.2008 в 19:22)   письмо автору
 
   для: Dizels   (21.07.2008 в 19:13)
 

код function.php был взят отсюда: http://softtime.ru/forum/read.php?id_forum=1&id_theme=145

Честно говоря я из этой функции к примеру так до конца и не понял - куда будет сохраняться маленькое изображение и как оно будет называться.
Так что прошу помочь и с этим.

   
 
 автор: sim5   (21.07.2008 в 19:34)   письмо автору
 
   для: Dizels   (21.07.2008 в 19:22)
 

Вы "честно" скопировали код, не позаботившись о путях и т.д..
Вторая ошибка из-за того, что до передачи заголвка уже был вывод в браузер.

   
 
 автор: Dizels   (21.07.2008 в 19:45)   письмо автору
 
   для: sim5   (21.07.2008 в 19:34)
 

Да нет, пути как-раз правильно прописаны.

Вышеприведенные файлы лежат в папке seo-news которая в свою очередь лежит в папке admin.
Сами файлы храняться в корне в папке files_news

   
 
 автор: sim5   (21.07.2008 в 20:10)   письмо автору
 
   для: Dizels   (21.07.2008 в 19:45)
 

../ - указывает на уровень который выше, разберитесь.

   
 
 автор: Dizels   (21.07.2008 в 20:17)   письмо автору
 
   для: sim5   (21.07.2008 в 20:10)
 

Ну все правильно, он и есть выше

   
 
 автор: sim5   (21.07.2008 в 20:23)   письмо автору
 
   для: Dizels   (21.07.2008 в 20:17)
 

Вы знаете как перводится это сообщение: Unable to open '../' for writing: No such file or directory
Могу помочь: "Нельзя открыть '.. /' для записи: нет такого файла или директории".
Это может быть - если неверн или несуществует указазнный путь/файл. Разбирайтесь.

   
 
 автор: Dizels   (21.07.2008 в 22:27)   письмо автору
 
   для: sim5   (21.07.2008 в 20:23)
 

Warning: imagejpeg() [function.imagejpeg]: Unable to open '' for writing: No error in Z:\home\domen.ru\www\admin\seo-news\function.php on line 43


Теперь вот такое выдает, это как я понимаю означает, что не может записать. Но почему?

   
 
 автор: sim5   (22.07.2008 в 04:54)   письмо автору
 
   для: Dizels   (21.07.2008 в 22:27)
 

Потому, что вы не выясняете путь записи файла по отношению к скрипту, а пытаетесь угадать его.

   
 
 автор: Dizels   (22.07.2008 в 10:45)   письмо автору
 
   для: sim5   (22.07.2008 в 04:54)
 

Я пытался понять - по моему пониманию - все пути были написаны верно, но скрипт не работает, начал пробывать подбирать - тоже не выходит.

Помогите плз, только не словами - ищи. Это я и так делаю, так как мне интересно не просто сделать, а и понять что и почему, чтобы во второй раз сам мог решить проблему.

Может "ткнете" меня в мою ошибку?

Если недостаточно какой-то инфы - дайте знать, я ее предоставлю.

   
 
 автор: mihdan   (22.07.2008 в 11:27)   письмо автору
 
   для: Dizels   (22.07.2008 в 10:45)
 

>Может "ткнете" меня в мою ошибку?
Да sim5 вам сказал, что ваша ошибка в путях-разберитесь с ними для начала, а потом с функцией imagejpeg

imagejpeg ( resource $image [, string $filename [, int $quality]] )

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования