Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Include(grafika.php)
Forum PHP.pl > Forum > PHP
timon27
Mam problem dotyczący includowania.
Posiadam skrypt grafiki zmniejszającą ją i zapisującą do oddzielnego folderu.
Skrypt znajduje się w pliku tworz_min.php.
Jednocześnie chciałbym go wywołać w pliku min.php zawierającym też html, jednak jest to niewykonalne za pomocą metody include.

Gdy uruchamiam min.php po raz pierwszy php zawiera nagłówek grafiki, więc nic nie wyświetla tylko zapisuje grafikę (działa), gdy odświeżę już mam grafikę. Przy czym oczywiście miało działać za pierwszym razem.
Czy jest wyjście z tej sytuacji?


min.php:
Kod
<?
if(!file_exists("miniatury/obrazek.jpg")){
    $szer=100;
    $filename="obrazek.jpg";
    include("tworz_min.php");
}
echo("<img src='miniatury/obrazek.jpg' width=100>");
?>


tworz_min.php
Kod
<?
header('Content-type: image/jpeg');
list($width, $height) = getimagesize($filename);
$new_width = $szer;
$new_height = floor($height*$szer/$width);
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
imagejpeg($image_p, "miniatury/$filename", 90);
?>
grn
W pliku tworz_min.php niepotrzebnie wysyłasz nagłówki. Usuń polecenie header.
Kshyhoo
Cytat(grn @ 26.06.2009, 06:55:40 ) *
W pliku tworz_min.php niepotrzebnie wysyłasz nagłówki. Usuń polecenie header.

Musisz poinformować przeglądarkę, że będzie wyświetlany obrazek.

timon27, spróbuj wywołać plik min.php tak:
  1. <?php
  2. echo("<img src='tworz_min.php' width='100'>");
  3. ?>

Wtedy otrzymasz od razu wyświetlenie obrazka po jego wytworzeniu. Jeżeli chcesz do tego pliku wysłać dodatkowo jakieś informacje, posłuż się:
  1. <?php
  2. echo("<img src='tworz_min.php?&obraz1=$obraz1 />");
  3. ?>

A odbierz w tym pliku:
  1. <?php
  2. $obraz1 = ($_GET['obraz1']);
  3. ?>

I pamiętaj o poprawnych " i ' tongue.gif
grn
Cytat(Kshyhoo @ 26.06.2009, 07:49:06 ) *
Musisz poinformować przeglądarkę, że będzie wyświetlany obrazek.


Obrazek nie jest wyświetlany tylko zapisywany na dysku.
Kshyhoo
Cytat(timon27 @ 26.06.2009, 00:00:23 ) *
Gdy uruchamiam min.php po raz pierwszy php zawiera nagłówek grafiki, więc nic nie wyświetla tylko zapisuje grafikę (działa), gdy odświeżę już mam grafikę. Przy czym oczywiście miało działać za pierwszym razem.
Czy jest wyjście z tej sytuacji?

Czyli pyta, w jaki sposób wyświetlić grafikę, zaraz po jej wygenerowaniu. Jak znasz inny bądź lepszy sposób, rzuć kodem.
erix
Cytat
Musisz poinformować przeglądarkę, że będzie wyświetlany obrazek.

A jak otwierasz obrazek via URL, to też ustawiasz MIME?

Ew. można by było dać sleep" title="Zobacz w manualu PHP" target="_manual, ale ciężko powiedzieć.
bim2
Hmm nie można tak?:
  1. <?php
  2. imagejpeg($image_p, "miniatury/$filename", 90);
  3. imagejpeg($image_p, null, 90);
  4. ?>
timon27
@bim2
Nie nie mogę. Działa tylko pierwsze polecenie, drugie już nie jest uruchamiane

@Kshyhoo
"Wtedy otrzymasz od razu wyświetlenie obrazka po jego wytworzeniu."
nie działa sad.gif
Twój kod nie uwzględnia najważniejszego if.
Kod min.php nie ma być uruchamiany zawsze. O to mi chodzi, aby uruchamiał się tylko w przypadku gdy miniatura nie istnieje. Miniaturyzacja kosztuje dużo czasu i nie mogę pozwolić by zawsze była uruchamiana. jednocześnie nie chcę tworzyć sam miniatur, ponieważ jest to dodatkowy element, o którym musi pamiętać osoba wrzucająca obrazki, a nie zawsze jestem to ja.
"Czyli pyta, w jaki sposób wyświetlić grafikę, zaraz po jej wygenerowaniu. "
Nie. Po prostu zapisuje plik. za drugim razem działa, bo jest uruchamiany w/w if.

EDIT:
Dzięki Ci bim2, jednak zadziałało. Takie proste, wystarczyło na to "wpaść".

Poprawiany kod:

min.php:
Kod
<?
if(!file_exists("miniatury/obrazek.jpg")){
   echo("<img src='tworz_min.php?szer=100&filename=obrazek.jpg'>");
}else{
   echo("<img src='miniatury/obrazek.jpg' width=100>");
}
?>


tworz_min.php

Kod
<?
header('Content-type: image/jpeg');
list($width, $height) = getimagesize($filename);
$new_width = $szer;
$new_height = floor($height*$szer/$width);
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
$filename="miniatury/".$filename;
imagejpeg($image_p, $filename, 90);
imagejpeg($image_p, null, 90);

?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.