Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP Tiedoston käsittely - Onko KUVA olemassa?

Sivun loppuun

tomq [18.07.2005 03:43:39]

#

<?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.jpge): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in . on line 3

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

kayttaja-2791 [18.07.2005 07:42:00]

#

<?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.

ajv [18.07.2005 08:01:32]

#

Villi veikkaus

<?php
file_exists('/path/to/file.jpg') // toiminnee
file_exists('http://mymamasnothot.com/file.jpg'); // ei toiminne
?>

kayttaja-2791 [18.07.2005 09:06:00]

#

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.

Lebe80 [18.07.2005 15:53:41]

#

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
}

kayttaja-2791 [18.07.2005 16:02:13]

#

Lebe80, koska file_exists ei tässä käytössä toimi kuten jo todettua.

Niko [18.07.2005 18:34:24]

#

<?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

Metabolix [18.07.2005 18:55:59]

#

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.)

Lebe80 [19.07.2005 10:21:55]

#

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.

ajv [19.07.2005 11:07:31]

#

Lebe80, pointti on se, että file_exists() ei toimi netin yli. Se toimii vain paikallisella koneella.

http://mbnet.fi/aapov/testing/file_exists.php

Lebe80 [19.07.2005 12:20:44]

#

ajv kirjoitti:

Lebe80, pointti on se, että file_exists() ei toimi netin yli. Se toimii vain paikallisella koneella.

http://mbnet.fi/aapov/testing/file_exists.php

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).

lapm [19.07.2005 15:35:16]

#

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.

Niko [21.07.2005 01:21:49]

#

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

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta