<?php $file = fopen ("https://www.ohjelmointiputka.net/img/banneri.jpg", "r"); if (!$file) { echo "kuvaa ei löytynyt.\n"; } else { echo "kuva löytyi.\n"; } fclose($file); ?>
Minulla on php-scripti joka toimii aina kun scripti löytää kuvan. mutta kun se ei löydä se kyllä ilmoittaa että kuvaa ei löydy, mutta antaa varoitukset:
(laitoin tahallaan warningissa kuvan osoitteen väärin)
Warning: fopen(https://www.ohjelmointiputka.net/img/banneri.
Warning: fclose(): supplied argument is not a valid stream resource in . on line 9
Joten voisiko noit warningeja jotenkin ohittaa jollain komennolla niinkuin esim. Javassa throw-komennolla? vai olisiko joku toinen tyyli parempi, millä tarkistaa onko KUVA olemassa yritin file_exist ei kai toimi kuvilla? tai ainakaan en saanut toimimaan
<?php if ($file = @fopen("https://www.ohjelmointiputka.net/img/banneri.jpg", "r")) { echo "Kuva löytyi!"; fclose($file); } else echo "Kuvaa ei löytynyt"; ?>
File_exists ei näemmä tosiaankaan toimi, mikähän siinä on, en osaa sanoa.
Villi veikkaus
<?php file_exists('/path/to/file.jpg') // toiminnee file_exists('http://mymamasnothot.com/file.jpg'); // ei toiminne ?>
Osaisiko joku tarkentaa, jäi vähän vaivaamaan. Jotenkin liittyy johonkin "Include path":iin mitä tuon manuaalin file_exists kommenteista luin, en vain oikein päässyt lopullisesti asiasta jyvälle.
Mikset tarkista löytyykö kuva _ennen_ kuin avaat sen fopen komennolla?
if (file_exists(...)){ // ka! sehän löytyy fopen (...); }else{ // no ei löytynyt }
Lebe80, koska file_exists ei tässä käytössä toimi kuten jo todettua.
<?php $file = @fopen ("https://www.ohjelmointiputka.net/img/banneri.jpg", "r"); if (!$file) { echo "kuvaa ei löytynyt.\n"; } else { echo "kuva löytyi.\n"; } fclose($file); ?>
Jos kerran noi virheet on ainoa ongelma @ poistaa ne
JTS:n esimerkki on tähän mennessä ainut oikea, ja sitä kannattaa käyttää. (Nikon esimerkissä on yhä virheellinen fclose, jos tiedostoa ei ole olemassa.)
JTS kirjoitti:
Lebe80, koska file_exists ei tässä käytössä toimi kuten jo todettua.
file_exists toimii PHP 3, PHP 4, PHP 5 -versioissa. Itsellä aina toiminut kaikissa käyttämässäni tiedostoissa, joten veikkaan, että on ollut vain jokin typo-osoitteessa.
Kukaan ei ole _todennut_ mitään, etteikö se toimisi. tomq vain totesi, ettei saanut sitä toimimaan.
Mutta ohjelmoinnissa harvoin on yhtä ainoaa oikeaa tapaa tehdä. Jos koodi toimii, siihen ei kannata koskea.
Lebe80, pointti on se, että file_exists() ei toimi netin yli. Se toimii vain paikallisella koneella.
ajv kirjoitti:
Lebe80, pointti on se, että file_exists() ei toimi netin yli. Se toimii vain paikallisella koneella.
no kyllähän mä sen tiesin... En vain hoksannut että tässä lataillaan kuvia "muiden sivuilta".
edit:
muutenkin olisi hyvä tuollaiset kertoa jo ensimmäisessä viestissä.
Yleensä esimerkiksi jätetty koodin pätkän sisältöä ei "lueta" sellaisenaan, vaan hakemistoina onkin yleensä "suuntaa-antava" hakemistopolku (minkälaisena luulin sen olevan nytkin).
Jokos olet ehtinyt testaamaan palauttaako tuo fopen false tilan kuten sen kuvaussivulla on maininta jos kuvaasi ei ole?
https://www.php.net/manual/fi/function.fopen.php
If the open fails, the function returns FALSE and an error of level E_WARNING is generated. You may use @ to suppress this warning.
Metabolix kirjoitti:
JTS:n esimerkki on tähän mennessä ainut oikea, ja sitä kannattaa käyttää. (Nikon esimerkissä on yhä virheellinen fclose, jos tiedostoa ei ole olemassa.)
sitten vielä fclosen eteen @ tai sitten tehdään se vain jos onnistui
<?php $file = @fopen ("https://www.ohjelmointiputka.net/img/banneri.jpg", "r"); if (!$file) { echo "kuvaa ei löytynyt.\n"; fclose($file); } else { echo "kuva löytyi.\n"; } ?> tai <?php $file = @fopen ("https://www.ohjelmointiputka.net/img/banneri.jpg", "r"); if (!$file) { echo "kuvaa ei löytynyt.\n"; } else { echo "kuva löytyi.\n"; } @fclose($file); ?> tai <?php error_reporting(E_NONE); $file = fopen ("https://www.ohjelmointiputka.net/img/banneri.jpg", "r"); if (!$file) { echo "kuvaa ei löytynyt.\n"; } else { echo "kuva löytyi.\n"; } fclose($file); ?> niin et näe virheitä etkä varotuksia
Aihe on jo aika vanha, joten et voi enää vastata siihen.