Tervehdys, elikkä ongelma olisi seuraavanlainen:
Eli index.php tiedostossa on seuraavanlainen kohta:
echo "<img src='gallery.php?id=".$id."'>"; ja jostain syystä tekemäni funktiot.php tiedosto ei toimi tai avaa tietokantayhteyttä gallery.php:n sisällä? Sama ongelma tuli vastaan muuallakin, jossa on img src:n sisällä oleva php tiedosto.
funktiot.php on includattuna index.php tiedossa ja toimii tosiaan hyvin kaikkialla muualla. Kokeilin includettaa sitä suoraan ton gallery.php sisään tuloksetta. gallery.php tiedostoon toki saa tietokantayhteyden auki kirjoittamalla tunnukset jne. sinne sisälle, mutta haluaisin kaiken hoidettavan funktiot.php tiedoston kautta!
Näytä koko koodi jotta voi ottaa kantaa.
Jos käytät include_once funktiota, otetaan file mukaan todellakin vain kerran koko scriptin aikana. Include ja include_once eivät tuota virheilmoituksia ollenkaan.
Voisit kokeilla käyttää require komentoa joka tuottaa virheilmoituksen ja on muuten toiminnallisuudeltaan käytännössä samanlainen kuin include.
Yleensäkin suosittelen käyttämään require komentoa includen sijaan. Koodin virheidenkäsittely on kertaluokkaa silloin parempi, koska virheet tulee helpommin esiin jo koodatessa.
-W-
Tässä lyhennelmä, koska en jaksa koko koodia kopsia :)
funktiot.php
<?PHP $config['server'] = 'jepjep'; $config['user'] = 'jep'; $config['password'] = 'jepjepjep'; $config['database'] = 'jep'; function Tietokantayhteys($config) { $link = mysql_connect($config['server'], $config['user'], $config['password']) or die("Tietokannan: " . mysql_error()); if (!$link) { echo ("Virhe.\n" . mysql_error()); exit; } $db = mysql_select_db($config['database'], $link); return $link; } ?>
index.php
<?PHP include 'toiminnot.php'; echo "<img src='gallery.php?id=".$id."'>"; ?>
gallery.php
<?PHP $link = Tietokantayhteys($config); ?>
Voipi olla virheitä, kun tein pikaversion, mutta pääpointti on siinä, ettei tossa gallery.php:ssä avaudu yhteystietokantaan, mikä taas onnistuu muualla käyttämällä
$link = Tietokantayhteys($config);
Todennäköisesti MUUALLA käytät tuota gallery.php sivua includella ja tuossa esimerkissä teet UUDEN kutsun kyseiseen sivuun. Palvelimelle tuo on kaksi täysin eri asiaa ja kaksi eri prosessia. Includella kyseessä on vain yksi prosessi. Ongelma siis liittynee siihen, että välillä sinulla on resurssi $link määritelty ja välillä ei?
Suomeksi: tarvitsen tuohon gallery.php alkuun jotakuinkin seuraavanlaista:
<?php if(! in_array('funktiot.php', get_included_files())): include('functiot.php'); endif; ?>
Tuo koodipätkä nyt ihan ulkomuistista. Jos ei toimi, niin tarkista metodien syntaksi php.net sivulta.
-W-
Wizard kirjoitti:
Include ja include_once eivät tuota virheilmoituksia ollenkaan.
Tuottavat kyllä virheilmoituksen. Requiren ja includen ero on siinä että jatketaanko lopun koodin suoritusta virheestä huolimatta.
Include tuottaa VAROITUKSEN, mutta ei FATAL ERRORia. Monesti Warning on kytketty pois päältä palvelimen asetuksista kun taas fatalia harvemmin. Monessa paikassa tuota varoitusta ei luokitella virheeksi, se on "kosmeettinen virhe". ;)
Siinä olet kyllä oikeassa, että includen varoituksen jälkeen voidaan suoritusta jatkaa kun taas requiren kohdalla suoritus loppuu samantien.
Eli varmaan yllä olevalla menetelmällä saa tarkistettua onko kyseistä tiedostoa liitetty vai ei. Kuitenkin get_included_files palauttaa koko pathin, eikä pelkästään funktiot.php, joten se ei sen takia suoraan toimi.
<?php if(! in_array('funktiot.php', get_included_files())): include('functiot.php'); endif; ?>
eli pitää ilmeisestikkin palauttaa get_included_files funktiolla johonkin muuttujaan tiedot ja sitten yrittää parsia sieltä erilleen funktiot.php, koska in_array ei osaa suoraan erotella sitä pitemmästä merkkijosta.
Eipä tämäkään näy auttavan. Tämä kyllä havaitsee onko includattu funtiot.php ja jos ei ole niin sitten lisää sen uudelleen. Tiedä sitten vaikuttaako toi img src tuolla index.php:ssä vai se että gallery.php:ssä content typenä on image/jpeg
$included_files = get_included_files();
$merkkijono = implode(" ", $included_files);
if(!strpos($merkkijono, "funktiot.php"))
{
include 'funktiot.php';
}
Aihe on jo aika vanha, joten et voi enää vastata siihen.