RDot

RDot (https://rdot.org/forum/index.php)
-   Web development (https://rdot.org/forum/forumdisplay.php?f=39)
-   -   Вопросы по PHP (https://rdot.org/forum/showthread.php?t=8)

Ded MustD!e 02.07.2010 19:44

Вопросы по PHP
 
В этой теме задаем вопросы по PHP.

Seravin 06.07.2010 05:35

Доброго времени суток! Есть у кого правильный скрипт аплоада картинок + изменение их размеров(с добавлением например полосок снизу и сверху если по высоте(ширине) не хватает)?

GrinGoO 06.07.2010 06:38

Цитата:

Сообщение от Seravin (Сообщение 568)
Доброго времени суток! Есть у кого правильный скрипт аплоада картинок + изменение их размеров(с добавлением например полосок снизу и сверху если по высоте(ширине) не хватает)?

Могу тебе написать только скрипт аплоада с адреса.

PHP код:

<form action="img.php">
URL <input name="url" type="text" /><br /><br />
Name <input name="name" type="text" />
<
input type="submit" value="Оке!"  />
</
form

PHP код:

<? 

$url 
$_REQUEST['url']; 
$name $_REQUEST['name']; 
$ext pathinfo($url); 

$image file_get_contents($url); 
file_put_contents("image/".$name.".".$ext['extension'], $image); 
?>

имхо, самый простейший скрипт. Кста, скрипт сохраняет в том же формате, что и по адресу, который вбиваешь в форму.

Есть прекрасная функция pathinfo() которая выдаёт в массиве расширение, путь, имя файла. Не нужно говнокодить регулярками по последней точке.

Добавь фильтрацию, а то получается, что можно залить любой файл... Создай каталог /image

niger 06.07.2010 13:02

PHP код:

<?php
  
/* hello from sch */
  
function resizing ($type_img,$source_src,$max_size_w,$max_size_h,$sufix "_s.",$path,$prefix "") {

        
$path_info pathinfo($source_src);
        
$file_extension $path_info["extension"];
        
$params getimagesize($source_src);

        switch ( 
$params[2] ) {
          case 
1$source imagecreatefromgif($source_src); break;
          case 
2$source imagecreatefromjpeg($source_src); break;
          case 
3$source imagecreatefrompng($source_src); break;
        }

      
//$max_size_w = 710; $max_size_h = 550; // size for image

      
if ( $params[0] > $max_size_w || $params[1]  >$max_size_h ) {

            
$koef_w $max_size_w $params[0]; // width
            
$koef_h $max_size_h $params[1]; // height

            
if ( $koef_w $koef_h )
            { 
// width
              
$koef $koef_w;
              
$koef_type="width";
            }
            else
            { 
// height
              
$koef $koef_h;
              
$koef_type="height";
            }

            
$resource_width floor($params[0] * ($koef));
            
$resource_height floor($params[1] * ($koef));

            
$resource imagecreatetruecolor($max_size_w$max_size_h);
            if (
$type_img == "small")
              
$back imagecolorallocate($resource116116116);   // grey small
          
else
            
$back imagecolorallocate($resource255255255);
            
imagefill $resource00$back );
            if (
$koef_type == "height")
              
imagecopyresampled($resource$source, ($max_size_w $resource_width)/2000$resource_width$resource_height$params[0], $params[1]);
          else
            
imagecopyresampled($resource$source0, ($max_size_h $resource_height)/200$resource_width$resource_height$params[0], $params[1]);

      }

      
//else $resource = $source;
      
else {
      
$resource imagecreatetruecolor($max_size_w$max_size_h);
      if (
$type_img == "small")
        
$back imagecolorallocate($resource116116116);    //background for small pics
      
else
        
$back imagecolorallocate($resource255255255);    //background for big pics
        
imagefill $resource00$back );
        
imagecopyresampled($resource$sourcefloor(($max_size_w $params[0])/2), floor(($max_size_h $params[1])/2), 00$params[0], $params[1], $params[0], $params[1]);
      }

      switch ( 
$params[2] ) {
          case 
1imagegif($resource,$path."/".$prefix.$path_info['filename'].$sufix.$file_extension,100); break;
          case 
2imagejpeg($resource,$path."/".$prefix.$path_info['filename'].$sufix.$file_extension,100); break;
          case 
3imagepng($resource,$path."/".$prefix.$path_info['filename'].$sufix.$file_extension); break;
        }
  }
  
//============================================================================
  //============================================================================
  // Usage : resizing ( big/small , image_to_resize, max_width , max_height , suffix_to_filename , path , prefix_to_filename  )
  //============================================================================

    
if (!isset($_FILES["Filedata"]) || !is_uploaded_file($_FILES["Filedata"]["tmp_name"]) || $_FILES["Filedata"]["error"] != 0) {
        echo 
"ERROR";
        exit(
0);
    }

    
$fileName $_FILES["Filedata"]["name"];
    
$path "path_for_images";

    
move_uploaded_file($_FILES["Filedata"]["tmp_name"], $path."/".$fileName);

    
//-------------------------------------------------------------------------
    
$source_src =  $path."/".$fileName;

    
resizing ('big',$source_src,710,550,"_s.",$path);
    
resizing ('small',$source_src,220,120,"_s.",$path,"preview_");
    
//------------------------------------------------------------------------------
    //delete source file
    
unlink($source_src);
    echo 
"OK";

?>

Может быть этот говнокод будет полезен. Изменяет размер картинки пропорционально. Будут вопросы - пишите, че-нить исправлю.
P.S. GrinGoO, ты вопрос читал, какая в жопу pathinfo? Человеку нужно изменить размер картинки.

Chaak 07.07.2010 12:11

Цитата:

Человеку нужно изменить размер картинки.
скрипт аплоада картинок

Seravin 07.07.2010 21:56

Снова проблема с этими картинками: когда одну заливаю на сервак то всё нормально, а когда 2+
Код:

Filename cannot be empty in /home/...
В чём причина может быть?

T-Rey 07.07.2010 22:09

Цитата:

Сообщение от Seravin (Сообщение 1431)
Снова проблема с этими картинками: когда одну заливаю на сервак то всё нормально, а когда 2+
Код:

Filename cannot be empty in /home/...
В чём причина может быть?

При сохранении картинки надо задавать имя, что и требует ошибка.

Выложи весь код скрипта.

Seravin 07.07.2010 22:13

Код:

function uploadimage($arr) {   
    $imageinfo = getimagesize($arr['tmp_name']);
    if($imageinfo['mime'] != 'image/jpeg') {
        return false;
    }   
    $uploaddir = 'upload/';
    mt_srand((double)microtime()*1000000);
    $in = md5(mt_rand());
    $uploadfile = $uploaddir . $in.".jpg";
   
 
    if (move_uploaded_file($arr['tmp_name'], $uploadfile)) {
    return $in;
    }
    else {
    return false;
  }
}

Код:

    for ($i=1;$i<=5;$i++) { 
        if (isset($_FILES['image'.$i])) {
        $res = uploadimage($_FILES['image'.$i]);
        if ($res!==false) {
        $im = ", image$i = '".$res."'";
        $i++;
    }       
    }
    }


DiSi 10.07.2010 13:00

нужно погрузить 5к изображений размером 30 кб (каждое)
с одного сервара на другой, на php реально такое реализовать? и скрипт тупо не повиснет? (хочу взять VDS под такие цели)

Chaak 10.07.2010 13:44

Не должен.
Ну реализовать можно тупо поочередно скачивать картинки с одного сервера на другой (fsockopen) + добавить в начало скрипта set_time_limit(0);


Часовой пояс GMT +3, время: 21:15.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot