Minulla on pieni ongelma kuvagallerian toimivuuden kanssa Operalla. Sivu toimii ihan kunnolla IE:llä, mutta Operalla tulee vain keskelle ruutua boxi jossa lukee Image. HTML ulostulo on tällainen :
<html> <head> <title>NumSoft - Kuvat</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link href="../style.css" rel="stylesheet" type="text/css"> </head> <body> <table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td valign="middle" align="center"> <img src="../img/otsikko.gif" border="0" alt="NumSoft" width="235" height="45"> <br> <br> <table width="550" height="267" border="0" cellspacing="0" cellpadding="0"> <tr> <td height="22" class="otsikko-vieri"> </td> <td class="otsikko-vieri"> </td> <td class="otsikko" valign="middle" align="center"><b>Kuvat</b></td> <td class="otsikko-vieri"> </td> <td class="otsikko-vieri"> </td> </tr> <tr> <td height="22" class="vasen"> </td> <td colspan="3" class="norm" valign="middle" align="center"><a href="../index.php?sivu=uutiset">Uutiset</a> | <a href="../index.php?sivu=jasenet">Jäsenet</a> | <a href="../index.php?sivu=kuvat">Kuvat</a> | <a href="../index.php?sivu=linkit">Linkit</a> | <a href="../index.php?sivu=admin">Ylläpito</a></td> <td class="oikea"> </td> </tr> <tr> <td height="187" class="vasen"> </td> <td colspan="3" class="keski" valign="top" align="left"> Tänne pistämme aina silloin tällöin kuvia jäsenistä, aseista ja pelipaikoista.<br><br> <center> <a href="kuva_1.jpg" target="_blank"><img src="thmb/tn_kuva_1.jpg" alt="Klikkaa tästä suurentaaksesi kuvan" border="1"></a><br><br> </center> </td> <td class="oikea"> </td> </tr> <tr> <td height="22" class="vasen"> </td> <td colspan="3" class="norm" valign="middle" align="center">36 </td> <td class="oikea"> </td> </tr> <tr> <td width="22" height="22" class="footer"> </td> <td width="75" class="footer"> </td> <td width="361" valign="middle" align="center" class="footer2"><b>[c] NumSoft 2004</b></td> <td width="75" class="footer"> </td> <td width="23" class="footer"> </td> </tr> </table> </td> </tr> </table> </body> </html>
ja PHP koodi tällainen :
<?php $otsikko = "Kuvat"; ?> <?php ob_start() ?> <html> <head> <title>NumSoft - Kuvat</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link href="../style.css" rel="stylesheet" type="text/css"> </head> <body> <table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td valign="middle" align="center"> <img src="../img/otsikko.gif" border="0" alt="NumSoft" width="235" height="45"> <br> <br> <table width="550" height="267" border="0" cellspacing="0" cellpadding="0"> <tr> <td height="22" class="otsikko-vieri"> </td> <td class="otsikko-vieri"> </td> <td class="otsikko" valign="middle" align="center"><b><?php echo $otsikko; ?></b></td> <td class="otsikko-vieri"> </td> <td class="otsikko-vieri"> </td> </tr> <tr> <td height="22" class="vasen"> </td> <td colspan="3" class="norm" valign="middle" align="center"><?php include('menu.php'); ?></td> <td class="oikea"> </td> </tr> <tr> <td height="187" class="vasen"> </td> <td colspan="3" class="keski" valign="top" align="left"> Tänne pistämme aina silloin tällöin kuvia jäsenistä, aseista ja pelipaikoista.<br><br> <center> <?php ob_start(); $polku = getcwd(); // Hakee hakemiston polun $thmb = "thmb/"; if(is_dir($polku)) { if($dh = opendir($polku)) { while(($file = readdir($dh)) !== false) { if(is_file($file)) { list($width, $height, $type, $attr) = getimagesize($file); // Listaa kuvan tiedot $tiedostopaate = substr(strrchr($file, '.'), 1); $tiedostonkoko = filesize($file) / 1024; // Muuttaa kuvan kooksi jotain kilotavua $tiedostonkoko = round($tiedostonkoko, 2); // Antaa 2 lukua desimaalipisteen jälkeen $paatteet = array("jpeg","jpg","png"); // Taulukko josta tarkistetaan onko kyseinen kuva sopiva if(in_array($tiedostopaate,$paatteet)) // Tiedostopäätteen tarkistus if($file==true) { // Määritellään pikkukuvan mitat $thumb_w = 100; $thumb_h = 80; header("Content-type: " .image_type_to_mime_type($type)); $thumbnail = imagecreatefromjpeg($file); $pikkukuva =ImageCreateTrueColor($thumb_w, $thumb_h); imagecopyresized($pikkukuva,$thumbnail,0,0,0,0,$thumb_w,$thumb_h,$width,$height); //tarkistetaan onko pikkukuva kansio olemassa. Jos ei niin luodaan sellainen if(is_dir($thmb)) { imagejpeg($pikkukuva,"thmb/tn_$file"); } else { mkdir("thmb", 0700); imagejpeg($pikkukuva,"thmb/tn_$file"); } // Tulostaa pikkukuvan ruudulle echo "<a href=\"$file\" target=\"_blank\"><img src=\"thmb/tn_$file\" alt=\"Klikkaa tästä suurentaaksesi kuvan\" border=\"1\"></a><br><br>"; } } } } } ob_end_flush(); ?> </center> </td> <td class="oikea"> </td> </tr> <tr> <td height="22" class="vasen"> </td> <td colspan="3" class="norm" valign="middle" align="center"><?php include('laskuri.php'); ?></td> <td class="oikea"> </td> </tr> <tr> <td width="22" height="22" class="footer"> </td> <td width="75" class="footer"> </td> <td width="361" valign="middle" align="center" class="footer2"><b><?php include('footer.php'); ?></b></td> <td width="75" class="footer"> </td> <td width="23" class="footer"> </td> </tr> </table> </td> </tr> </table> </body> </html> <?php ob_end_flush() ?>
Miten saisin sivut toimimaan kunnolla Operalla?
Ääk, kauheaa spagetti-HTML:ää. Täydellisessä maailmassa tuo ei olisi tehty taulukoilla (ainakaan tyhjillä celleillä), ja kaikki mahdollinen olisi CSS:ssä. Mutta sellaisessahan emme elä.
No eniveis. Ongelma lienee HTML-koodissa eikä PHP:ssä, sillä PHP ulostaa samat asiat browserista välittämättä. Laitat vain sivun jonnekin, avaat sen, katsot sorsan, ja etsit tageja, joita ei ole suljettu, tjms.
Validaattori ei tuosta oikeastaan virheitä löytänyt. Kokeileppa tyhjentää Operan cache. Ainakin omalla Operalla (v. 7.5) on paha tapa jättää päivittämättä sivu, vaikka painaakin refreshiä. Sitten kun sitä rämpyttää oikeen kunnolla, niin vasta päivittää.
Edit: typo
Edit2: Hmmm... Koodin olen nähnyt jossain.
Sirrry XHTML:ään
Syy on siinä IE tulkkaa kaiken paskankin koodin ja muut selaimet eivät. IE:n koodista muistaakseni oli jossain vaiheessa 75% koodia pelkästään tuon huonon koodin tulkkausta varten. Sanalla sanoen: Hyi!
Kokeilin sivua IE:llä, Operalla ja Mozillalla, ja kaikilla näytti samalta. Hankala siis auttaa tämän perusteella. Onko juuri tuo yllä oleva HTML-sivu se, joka ei toimi kunnolla Operalla? Voitko laittaa jonnekin kuvankaappauksen virheellisesti näkyvästä sivusta? Kuinka uutta Operan versiota käytät?
Miten tarkka opera on noitten meta-tagien suhteen. Pitäisikö myös seuraavat Meta-määreet olla listattu: keywords, description, author ja generator ? Content-arvoksi voi panna tyhjää ( " " ), jos ei niitä halua kertoa?
Minun sivut nimittäin näkyy Operalla ja ainoa ero tuohon ylläolevaan (ellei tuosta taulukosta löydy virhettä) on noiden metatagien listaus (+ css-filu polku, mutta tuskin opera sitä vaatii)
Ps: Miksi näin:
<?php $otsikko = "Kuvat"; ?> <?php ob_start() ?>
Miksi ei näin:
<?php ob_start(); $otsikko = "Kuvat"; ?>
Tuossa on ainakin PHP-koodissa virhe, puuttu puolipiste.
No kun tämä nyt ei kerran vieläkään ole ratkennut, niin annappa URL tuohon galleriaan, niin pääsee paikan päälle katsomaan.
Pekka Mansikka kirjoitti:
<?php $otsikko = "Kuvat"; ?> <?php ob_start() ?>Tuossa on ainakin PHP-koodissa virhe, puuttu puolipiste.
Ei ole virhettä. Knoppitietona vain, että jos koodirivejä on vain yksi, niin tulkki ei tarvitse puolipistettä ilmoittamaan komennon lopusta. "?>" ikään kuin ajaa saman asian. Sitä en tosin tiedä, enkä just pääse testaamaan, voisiko viimeiseltä riviltä aina jättää puolipisteen pois. Kuitenkin fiksuinta on aina päättää rivi puolipisteeseen, niin välttää turhat parse errorit, kun lisäilee rivejä.
ajv kirjoitti:
Edit2: Hmmm... Koodin olen nähnyt jossain.
Mureakuhassa oli tuo koodi aika vasta :)
Joo.. koodi on kuhasta. Operan 7.54 versiota käytän. Galleria löytyy tuolta : www.numsoft.shyper.com/kuvat
Pitänee kokeilla tyhjentää cache...
[blaze@sakura2 ~]$ lynx -head -dump http://www.numsoft.shyper.com/kuvat/
HTTP/1.1 200 OK
Date: Fri, 27 Aug 2004 16:26:39 GMT
Server: Apache/1.3.31 (Unix) mod_auth_passthrough/1.8 mod_log_bytes/1.2 mod_bwl
imited/1.4 PHP/4.3.8 FrontPage/5.0.2.2634a mod_ssl/2.8.19 OpenSSL/0.9.7a
X-Powered-By: PHP/4.3.8
Connection: close
Content-Type: image/jpeg
Lähetät HTML-tiedoston tyypillä image/jpeg. Opera toimii oikein ja yrittää näyttää sen kuvana (mikä ei tietenkään toimi, vaan tuloksena on tuo rikkinäisen kuvan merkki). IE taas ei välitä mime-tyypeistä hölkäsen pöläystä (rikkoo siis HTTP-speksejä), vaan haistelee tiedoston sisältöä, toteaa sen olevan HTML:ää ja näyttää sen sellaisena.
Säädä skriptisi lähettämään tuo HTML-tiedosto oikealla mime-tyypillä (text/html), niin oikein toimivatkin selaimet saavat sen näytettyä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.