Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр 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'], 0, 7))!="http://") && (strtolower(substr($_POST['url'], 0, 7))!="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'], 0, strrpos($_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("../".$path, 0644);
      }
    }
    else 
links("Не указан файл для загрузки");
  } 
  include(
"function.php");
  
    
// Вызываем функцию resizeimg(), создающую уменьшенную копию фотографии
  // $image и помещающую её в файл $smallimage
  
if(!resizeimg($path, $smallimage, 133, 100))
  {
    
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_img, 255, 255, 255);       
    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_img, 0, 0, 0, 0, $w, $h, $size_img[0], $size_img[1]);                
    
// сохраняем уменьшенную копию в файл 
    
if ($size_img[2]==2)  imagejpeg($dest_img, $smallimage);                      
    else if (
$size_img[2]==1) imagegif($dest_img, $smallimage);                      
    else if (
$size_img[2]==3) imagepng($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 Яндекс.Метрика Яндекс цитирования