Tırnaklı PHP problem yaratıyor

1 Cevap php

Ben net tutsplus aldım bu kaynak kodu var. Onu yapılandırılmış ve bir PHP dosyası çalışmaya yaptık. Bu orijinal görüntü aktararak çalışır, ancak bu minik klasöre oluşturmaz.

<?php

$final_width_of_image = 100;
$path_to_image_directory = "../../img/events/" . urldecode($_GET['name']) . "/";
$path_to_thumbs_directory = "../../img/events/" . urldecode($_GET['name']) . "/thumbnails/";

function createThumbnail($filename)
{
    if(preg_match('/[.](jpg)$/', $filename)) 
    {
        $im = imagecreatefromjpeg($path_to_image_directory . $filename);
    } 
    elseif(preg_match('/[.](gif)$/', $filename)) 
    {
        $im = imagecreatefromgif($path_to_image_directory . $filename);
    } 
    elseif(preg_match('/[.](png)$/', $filename)) 
    {
        $im = imagecreatefrompng($path_to_image_directory . $filename);
    }

    $ox = imagesx($im);
    $oy = imagesy($im);

    $nx = $final_width_of_image;
    $ny = floor($oy * ($final_width_of_image / $ox));

    $nm = imagecreatetruecolor($nx, $ny);

    imagecopyresized($nm, $im, 0,0,0,0,$nx,$ny,$ox,$oy);

    imagejpeg($nm, $path_to_thumbs_directory . $filename);
    $tn = '<img src="' . $path_to_thumbs_directory . $filename . '" alt="image" />';
    echo $tn;
}

if(isset($_FILES['fupload'])) {

    if(preg_match('/[.](jpg)|(gif)|(png)$/', $_FILES['fupload']['name'])) {

        $filename = $_FILES['fupload']['name'];
        $source = $_FILES['fupload']['tmp_name'];
        $target = $path_to_image_directory . $filename;

        move_uploaded_file($source, $target);

        createThumbnail($filename);
    }
}

?>

Temelde yüklenen görüntünün bir simge oluşturmak ve farklı bir klasöre orijinal görüntü saklamak gerekiyordu.

Yolları doğru, bu URL klasör adını alarak çalışır, çalışır, ama hiçbir şey minik klasör için çalışıyor.

Bu ilgili bir soru sorabilir ÖNCE, evet, küçük nesil PHP GD benim sunucu üzerinde çalışır, ben ayrı ayrı test ettim. Yani bu sorun değildir. :)

Bunu nasıl işe alabilirim? (

1 Cevap

Daha iyi bir resmini oluşturur gibi Eh, ilk kapalı, imagecopyresampled() kullanın.

İkincisi, dosya sistemi dizinine ve url dizinin aynı değişkeni kullanmanız gerekir. Bu $filesystem_path_to_thumbs ve $url_path_to_thumbs olmalıdır. Yani onları farklı ayarlayabilirsiniz.

Üçüncü olarak, genişlik ve yükseklik hem de boyut kontrolü yapmak isteyebilirsiniz. Birisi uzun boylu bir resim yüklerse ne olur? Sizin küçük hedef kutunun dışında olacak (ancak bu büyük bir sorun olmayabilir).

Dördüncü olarak, küçük resim dosyası (performans nedenlerle) minik oluşturmadan önce başparmak dizininde olup olmadığını görmek için bir kontrol yapmak prob gerekir ...

Son olarak, aslında başarısız oluyor nedeni, $final_width_of_image, $path_to_image_directory ve $path_to_thumbs_directory işlev içinde tanımlanmış değildir olmasıdır. Ya:

  1. Fonksiyonunun başında onları küresel yapmak, böylece işlev içinde onlara erişebilirsiniz global $final_width_of_image, $path_to_image_directory, $path_to_thumbs_directory;

  2. Işlevine onları argümanlar yapmak: function createTumbnail($image, $width, $path_to_images, $path_to_thumbs) {

  3. Hard (işlevin içinde işlevin dışından kendi beyanı Taşı) işlev içinde onlara kod.

Şahsen ben 2. yapardım, ama bu gereksinimleri ve ihtiyaçları ne kadar var ...