PHP, generera thumbnails.

Avdelningen för webbrelaterad programmering och grafisk design.
Post Reply
User avatar
nem
Hedersbit
Posts: 4678
Joined: 2002-04-12 15:48:33
Location: Lund

PHP, generera thumbnails.

Post by nem »

Jag har precis börjat lära mig PHP och har försökt skriva en funktion för att skapa thumbnails från stora originalfiler. Tyvärr fungerar det givetvis inte som jag tänkt mig. ;)

Det verkar som om allt utom att skriva filen till disken fungerar. Jag har provat att sätta chmod 777 på alla filer, men det gjorde ingen skillnad, och det borde det väl inte heller. Någon som hittar något uppenbart fel?

Code: Select all

<?php

/* User defined variables */
$source_file = "./test.jpg";
$destination_file = "./thumb_test.jpg";
$new_width = 400;

/* Check if above variables seems OK */
print "Source: $source_file<BR>";
print "Destination: $destination_file<BR>";

/* Create image resource from old file */
$source_image = imagecreatefromjpeg($source_file);

/* Get old image size */
$old_width = imagesx($source_image);
$old_height = imagesy($source_image);
$aspect = $old_width/$old_height;

/* Calculate new image size */
$new_height = $new_width/$aspect;

/* Create new image resource */
$destination_image = imagecreatetruecolor($new_width,$new_height);
$created_width = imagesx($destination_image);
$created_height = imagesy($destination_image);


/* Check if above calculations worked as expected */
print "Original width: $old_width<BR>";
print "Original height: $old_height<BR>";
print "Thumbnail width: $new_width<BR>";
print "Thumbnail height: ".(int)$new_height."<BR>";
print "Created thumbnail width: $created_width <BR>";
print "Created thumbnail height: $created_height <BR>";
print "Aspect: $aspect<BR>";

/* Resize source image to the new image resource with the values calculated above */
imagecopyresized($destination_image, $source_image, 0, 0, 0, 0, $new_width, (int)$new_height, $old_width, $old_height);

/* Write thumbnail to disk */
imagejpeg($destination_image, $destination_file, 100);

/* Destroy image resources */
imagedestroy($source_image);
imagedestroy($destination_image);

?>
Utskriften ser ut så här:
Source: ./test.jpg
Destination: ./thumb_test.jpg
Original width: 1280
Original height: 960
Thumbnail width: 400
Thumbnail height: 300
Created thumbnail width: 400
Created thumbnail height: 300
Aspect: 1.3333333333333
"Rightful liberty is unobstructed action according to our will within limits drawn around us by the equal rights of others."- Thomas Jefferson
User avatar
Niklas Berggren
Hedersbit
Posts: 3524
Joined: 2002-03-08 17:53:04
Location: Göteborg (Skövde)
Contact:

Post by Niklas Berggren »

Jag tycker då allt ser fullständigt korrekt ut.

Du kan prova att ersätta din imagejpeg($destination_image, $destination_file, 100); med följande:

Code: Select all

if(imagejpeg($destination_image, $destination_file, 100) == false) {
print "Det gick inte att skriva till $destination_file\n";
}
Gnäller scriptet något extra med det?
"How about the government sticks to courts, police, defense and corruption and leave compassion to the people who have it?" - Penn Jillette.
User avatar
nem
Hedersbit
Posts: 4678
Joined: 2002-04-12 15:48:33
Location: Lund

Post by nem »

Mycket riktigt...
Det skriver då ut:
Det gick inte att skriva till ./thumb_test.jpg

Så jag antar att felet inte är i koden (phew ;)) och lokalt istället. Måste man mixtra med Apache för att det ska ha skrivrättigheter?
"Rightful liberty is unobstructed action according to our will within limits drawn around us by the equal rights of others."- Thomas Jefferson
User avatar
Niklas Berggren
Hedersbit
Posts: 3524
Joined: 2002-03-08 17:53:04
Location: Göteborg (Skövde)
Contact:

Post by Niklas Berggren »

Provat att ange en absolut sökväg, eller köra scriptet i ett shell?
"How about the government sticks to courts, police, defense and corruption and leave compassion to the people who have it?" - Penn Jillette.
User avatar
GUNNAR44
Posts: 445
Joined: 2002-10-11 13:18:57

Post by GUNNAR44 »

Ett alternativ kanske kan vara:
http://www.stoverud.com/PHPhotoalbum/
User avatar
Hein
Posts: 1291
Joined: 2002-03-09 19:38:38
Location: Norrland
Contact:

Post by Hein »

grejen sony är att han vill lära sig själv ? :P
. .. ... .... ..... ...... ....... ....... ..........
User avatar
GUNNAR44
Posts: 445
Joined: 2002-10-11 13:18:57

Post by GUNNAR44 »

Häääjn wrote:grejen sony är att han vill lära sig själv ? :P
grejen är den att man kan väl göra det lika bra genom att kolla på ett exempel .... ? ::)
User avatar
linc
Administratör
Posts: 7602
Joined: 2002-02-13 22:22:11
Location: Skåneland
Contact:

Post by linc »

nem wrote:Mycket riktigt...
Det skriver då ut:
Det gick inte att skriva till ./thumb_test.jpg

Så jag antar att felet inte är i koden (phew ;)) och lokalt istället. Måste man mixtra med Apache för att det ska ha skrivrättigheter?
PHP-script körs som samma användare som apache så vitt jag vet, så den usern måste iaf ha skrivrättigheter i katalogen du försöker spara i.
hej.
User avatar
Niklas Berggren
Hedersbit
Posts: 3524
Joined: 2002-03-08 17:53:04
Location: Göteborg (Skövde)
Contact:

Post by Niklas Berggren »

linc wrote:PHP-script körs som samma användare som apache så vitt jag vet, så den usern måste iaf ha skrivrättigheter i katalogen du försöker spara i.
Stämmer, men han chmoddade ju till 777 :)
"How about the government sticks to courts, police, defense and corruption and leave compassion to the people who have it?" - Penn Jillette.
User avatar
nem
Hedersbit
Posts: 4678
Joined: 2002-04-12 15:48:33
Location: Lund

Post by nem »

Nicke. wrote:Stämmer, men han chmoddade ju till 777 :)
Kanske ett missförstånd, jag chmoddade till 777 på filen den skulle läsa, men startade apache som min användare och tycker därför att det borde ha samma skrivrättigheter som jag, men det verkar inte vara fallet.

Om jag chmoddar -R 777 på katalogen jag ska skriva till så fungerar det. Men är det egentligen en snygg lösning?
Att ge allt och alla skrivrättigheter till en katalog på en publik server känns vanskligt. (Fast jag kan inte så mycket om sådant här så oron kanske är obefogad?).

I vilket fall borde lösningen vara att se till att Apache får (eller snarare behåller) skrivrättigheter i katalogen. Och det borde stå någonstans i manualen. Ivf, tack för hjälpen.
"Rightful liberty is unobstructed action according to our will within limits drawn around us by the equal rights of others."- Thomas Jefferson
User avatar
Niklas Berggren
Hedersbit
Posts: 3524
Joined: 2002-03-08 17:53:04
Location: Göteborg (Skövde)
Contact:

Post by Niklas Berggren »

nem wrote:Kanske ett missförstånd, jag chmoddade till 777 på filen den skulle läsa, men startade apache som min användare och tycker därför att det borde ha samma skrivrättigheter som jag, men det verkar inte vara fallet.

Om jag chmoddar -R 777 på katalogen jag ska skriva till så fungerar det. Men är det egentligen en snygg lösning?
Att ge allt och alla skrivrättigheter till en katalog på en publik server känns vanskligt. (Fast jag kan inte så mycket om sådant här så oron kanske är obefogad?).

I vilket fall borde lösningen vara att se till att Apache får (eller snarare behåller) skrivrättigheter i katalogen. Och det borde stå någonstans i manualen. Ivf, tack för hjälpen.
Ta dig en titt i din apache-config (httpd.conf), där kan du ställa in vilken user och grupp din dameon ska köra som. Om jag minns rätt så kör du FBSD? Isf så installerar ports gruppen och användaren www åt dig, chowna filerna till www:www så borde det gå.
"How about the government sticks to courts, police, defense and corruption and leave compassion to the people who have it?" - Penn Jillette.
User avatar
nem
Hedersbit
Posts: 4678
Joined: 2002-04-12 15:48:33
Location: Lund

Post by nem »

Nicke. wrote:Ta dig en titt i din apache-config (httpd.conf), där kan du ställa in vilken user och grupp din dameon ska köra som. Om jag minns rätt så kör du FBSD? Isf så installerar ports gruppen och användaren www åt dig, chowna filerna till www:www så borde det gå.
Sådant är inget problem. ;)

Problemet är att jag inte kan något om säkerhetsaspekterna, så jag vet inte vilken lösning som är att föredra.
"Rightful liberty is unobstructed action according to our will within limits drawn around us by the equal rights of others."- Thomas Jefferson
Post Reply