Avatar billede lobster Nybegynder
18. november 2003 - 18:42 Der er 31 kommentarer og
2 løsninger

Fejl efter opdatering til PHP 4.3.4

Hej.

Jeg har lige fået opdateret min php til 4.3.4. Men nu virker getimagesize() ikke mere.
Jeg bruger getimagesize til at finde ud af om et uploadet billede er af formatet JPG.

Sådn ser min kode stump ud

$pictest = getimagesize($upfile);

if($pictest[2]!=2)
{
echo "Fejl! Billedet skal være af formatet JPG/JPEG<br><br>
  <b>Løsning:</b><br><br>
 
  1. Konverter billedet.<BR>
  2. Vælg et andet billed.<BR></font>";
}
else
{

blah blah

}

Nogen gange skriver denne fejl ud:
Warning: getimagesize(): Read error! in
andre gange hopper den bare ind i min if sætning..

Nogen der har oplevet noget lignende med den nye php?
Avatar billede lobster Nybegynder
18. november 2003 - 18:43 #1
Jeg har kigger php change loggen igennem, og læst at getimagesize() er ændret på nogle punkter. Men det tyder ikke på at det har noget med dette at gøre..
Avatar billede rackbox Nybegynder
18. november 2003 - 18:46 #2
Har du husket at installere GBLib igen?
Avatar billede lobster Nybegynder
18. november 2003 - 18:47 #3
I min phpinfo() skriver den at gdlib er installeret. Og getimagesize har ikke noget med gdlib at gøre..
Avatar billede lobster Nybegynder
18. november 2003 - 18:52 #4
Jeg bruger getimagesize() et andet sted på mit site også, hvor fil argumentet peger direkte ned på en lokation på serveren -og der virker det fint. Hvorimod i det andet tilfælde, er det en fil som bliver uploadet via en HTTP form, og bliver først skrevet skrevet på serveren senere i mit script.
Avatar billede rackbox Nybegynder
18. november 2003 - 18:56 #5
Det har det i følge http://dk.php.net/image.. Men det ser ud til også at virke uden...

Beskriv den fejl, du får, og prøv eventuelt følgende som test:
$image = "filename.jpg";
$test = getimagesize($image);
foreach ($test as $key=> $value){
        echo $key.":".$value."<br>";
}

Hvad svarer den?
Avatar billede rackbox Nybegynder
18. november 2003 - 18:57 #6
Eller prøv bare med en fopen() for at se om filen, du forsøger at læse overhovedet er tilgængelig
Avatar billede lobster Nybegynder
18. november 2003 - 19:12 #7
bare lige får the record, getimagesixe kræver ikke gdlib.
http://dk.php.net/manual/en/function.getimagesize.php

Output :
Warning: Invalid argument supplied for foreach() in /usr...

Nok fordi getimagesize ikke virker..
Avatar billede lobster Nybegynder
18. november 2003 - 19:14 #8
som sagt før, virker getimagesize fint nok på en fil som ligger på serveren, men den virker ikke når filenamet er en $variable fra en HTTP form
Avatar billede rackbox Nybegynder
18. november 2003 - 19:20 #9
Det kan eventuelt være, at du bruger den forkerte del.. Hvis det er et upload, smides filen således:
$_FILES['feltnavn']['tmp_name'];

Den ligger i et temp-dir indtil du har flyttet den med move_uploaded_files();

jeg kender ikke nok til din situation til at turde kalde dette for et svar.. Men giv mig lidt mere - så kan det være at jeg lige kan rulle en løsning ud ;-)
Hvis, som du siger, det virker andetsteds, så er problemet nok ikke, at getimagesize() ikke virker..
Avatar billede lobster Nybegynder
18. november 2003 - 19:25 #10
Bruges dette -> $_FILES['feltnavn']['tmp_name'];
ikke kun hvis register_globals er off ? ..
Men jeg gir det et forsøg.
Avatar billede lobster Nybegynder
18. november 2003 - 19:33 #11
Jeg prøvede at smide den her ind som jeg fandt på php.net :
if (is_uploaded_file($HTTP_POST_FILES['upfile'])
{
echo "den virker" ;
}
else
{
echo "den virker ikke" ;
}

Og den virkede ikke :(
Avatar billede rackbox Nybegynder
18. november 2003 - 20:50 #12
Ahh.. Jeg har fundet din fejl.. $HTTP_POST_FILES[] er discontinued i nyere PHP-versioner...
Avatar billede rackbox Nybegynder
18. november 2003 - 20:58 #13
og så vidt jeg ved, har $HTTP_POST_FILES['upfile'] aldrig været valid syntax
Avatar billede lobster Nybegynder
18. november 2003 - 21:11 #14
Hmm... Jamen jeg bruger ikke HTTP_POST_FILES .. jeg bruger bare $upfile variablen
Avatar billede rackbox Nybegynder
18. november 2003 - 21:14 #15
Du skriver at dit seneste eksempel ikke virker... Det gør det heller ikke. Når en bruger poster en fil lægges den først i et temp-dir, som kan accesses gennem $_FILES['feltnavn']['tmp_name']
$_FILES er et 2-dimensionelt array, og derfor virker $_FILES['upfile'] ikke... Hvad indeholder din upfile? Prøv at lave en echo og smid svaret her..
Avatar billede lobster Nybegynder
18. november 2003 - 21:22 #16
Ja men når register_global er sat til on, burde det ikke være nødvendigt at bruge diverse $_FILES[] og $HTTP_POST_FILES, og det gør jeg heller ikke.
Jeg bruger blot variablen $upfile, som stammer fra min HTML FORM med input tagget -> <INPUT NAME=\"upfile\" TYPE=\"file\" size=30>

Og denne $upfile variabel er sat, og når jeg smider den i en echo"$upfile" ; skriver den ikke noget ud, men hvis jeg skriver echo "$upfile_name" ; skriver den navnet på filen ud.
Avatar billede rackbox Nybegynder
18. november 2003 - 21:25 #17
Men så skriver du vel bare echo $upfile_tmp_name;
Avatar billede rackbox Nybegynder
18. november 2003 - 21:27 #18
og tilsvarende... $arr = getimagesize($upfile_tmp_name);
returnerer et array med dine oplysninger om den uploadede fil...
Avatar billede lobster Nybegynder
18. november 2003 - 21:35 #19
$pictest = getimagesize($upfile_tmp_name) -> virker heller, men den skriver heller ingen fejl. Den køre blot ned i min if sætning:
if($pictest[2]!=2)
{
echo "Fejl! Billedet skal være af formatet JPG/JPEG<br><br>
  <b>Løsning:</b><br><br>
 
  1. Konverter billedet.<BR>
  2. Vælg et andet billed.<BR></font>";
}


Dvs, den kan ikke læse array'et..
Avatar billede rackbox Nybegynder
18. november 2003 - 21:50 #20
Hvad skriver den så til en echo $upfile_tmp_name?
Avatar billede lobster Nybegynder
18. november 2003 - 21:51 #21
Der skriver den ikke noget ud...
Avatar billede rackbox Nybegynder
18. november 2003 - 21:59 #22
Prøv en gang at bruge echo $_FILES['upfile']['tmp_name']; (naturligvis efter at du har postet siden med filen...) Hvis det virker, så er det i hvert fald ikke din post eller getimagesize, den er gal med...
Avatar billede rackbox Nybegynder
18. november 2003 - 22:11 #23
Og hvad har du iøvrigt imod at bruge superglobals? jeg ser dem kun som en fordel...
Avatar billede lobster Nybegynder
18. november 2003 - 22:42 #24
echo $_FILES['upfile']['tmp_name']; -> der skriver den heller ikke noget ud.. desvæære..
Skam intet imod at bruge dem, hvis de kan gøre nytte.
Avatar billede rackbox Nybegynder
18. november 2003 - 23:02 #25
Og du er sikker på, at der bliver postet noget? Prøv en phpinfo(); for at se, om der bliver postet... Bare søg efter dit feltnavn.. (upfile)

Har du iøvrigt husket at bruge de rigtige form-tags?

<form enctype='multipart/form-data' name='postform' action='din_side.php' method=post>

ecntype er MEGET VIGTIG
Avatar billede lobster Nybegynder
18. november 2003 - 23:15 #26
ja enctype har jeg med..
Ved at smide en phpinfo() ind i mellem fandt jeg følgende:
_FILES["upfile"] Array
(
    [name] => lp.jpg
    [type] =>
    [tmp_name] =>
    [error] => 3
    [size] => 0
)Og ja der kan man se at den ikke finder nogen type, som er den jeg vil ha fat i ex. 2 = jpg/jpeg

Og jeg har prøvet med en del forskellige billede uden noget held.
Avatar billede sukos Juniormester
18. november 2003 - 23:43 #27
Du kan prøve lidt med dette uploadscript:

http://www.showsource.dk/php/vis_script.php?id=1064975823

Der er godt nok ikke noget om str. men det kan jo laves.
Derimod tjekkes der netop hvilken filtype det er.

Men hvorvidt getimagesize virker, kan du jo teste med:

<?php
$str = getimagesize($_SERVER["DOCUMENT_ROOT"] ."/billede.jpg");
echo $str[2];
?>
hvor billede.jpg selvf. ligger i roden af dit site, altså domain.dk/billede.jpg
Avatar billede lobster Nybegynder
19. november 2003 - 01:12 #28
getimagesize virker på en fil som ligger på serveren dvs -> getimagesize("dir/fil.jpg") ..

Men ikke på en fil som bliver uploadet..
Avatar billede sukos Juniormester
19. november 2003 - 01:35 #29
$str = getimagesize($_FILES["upfile"]["tmp_name"]);
Avatar billede lobster Nybegynder
19. november 2003 - 13:45 #30
Lidt pinligt det her :)
Men det viste sig at det skyldes at der ikke var mere plads disken på serveren.
Men tak for jeres indsats alligevel.

//Lobster
Avatar billede rackbox Nybegynder
19. november 2003 - 13:45 #31
sukos: som jeg har prøvet at få ham til siden start...
Avatar billede lobster Nybegynder
19. november 2003 - 13:46 #32
svar
Avatar billede rackbox Nybegynder
19. november 2003 - 13:47 #33
hmm.. Nå.. Så fik du da løst dit problem ;-) Til lykke!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester