__autoload() werkt niet met XAMPP?
ik vraag me af waarom de __autoload() functie niet werk wanneer ik mijn websites lokaal bekijk. Wanneer ik de code online zet, werkt het nochtans zoals het hoort. Volgens mij gaat het dus om een verkeerd pad waarnaar ik lokaal link. Ik vind echter geen manier om een correct pad aan te maken. Hier is mijn mappen/bestanden structuur:
index.php
includes/head.inc.php
includes/foot.inc.php
includes/right.inc.php
includes/config.inc.php
libs/class.phpmailer.php
libs/class.weather.php
libs/class.xml.parser.php
css/...
js/...
...
En hier hebben jullie de code die in m'n config file staat
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
define('DOCROOT', $_SERVER['HTTP_HOST']);
function __autoload($class){
require_once DOCROOT . '/libs/class.' . $class . '.php';
}
?>
define('DOCROOT', $_SERVER['HTTP_HOST']);
function __autoload($class){
require_once DOCROOT . '/libs/class.' . $class . '.php';
}
?>
Dit geeft de volgende error:
Quote:
Warning: require_once(local.bellewaerdefun.be/libs/class.phpmailer.php) [function.require-once]: failed to open stream: No such file or directory in D:\Websites\xampp\htdocs\bellewaerdefun\includes\config.inc.php on line 44
Fatal error: require_once() [function.require]: Failed opening required 'local.bellewaerdefun.be/libs/class.phpmailer.php' (include_path='.;D:\Websites\xampp\php\PEAR') in D:\Websites\xampp\htdocs\bellewaerdefun\includes\config.inc.php on line 44
Fatal error: require_once() [function.require]: Failed opening required 'local.bellewaerdefun.be/libs/class.phpmailer.php' (include_path='.;D:\Websites\xampp\php\PEAR') in D:\Websites\xampp\htdocs\bellewaerdefun\includes\config.inc.php on line 44
Hoe kan ik dus opvangen dat er niet naar "D:\Websites\xampp\php\PEAR" maar wel naar "D:\Websites\xampp\htdocs\bellewaerdefun"gelinkt wordt??? Alvast bedankt voor jullie reactie(s)!
Gewijzigd op 18/04/2011 19:53:06 door Sam Clauw
Andere docroot gebruiken lijkt mij.
Gewijzigd op 18/04/2011 21:07:43 door Write Down
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$path = '/libs';
set_include_path(get_include_path() . $path);
function __autoload($class){
require_once 'class.' . $class . '.php';
}
?>
$path = '/libs';
set_include_path(get_include_path() . $path);
function __autoload($class){
require_once 'class.' . $class . '.php';
}
?>
Het geeft mij namelijk de volgende foutmelding:
Quote:
Warning: require_once(class.weather.php) [function.require-once]: failed to open stream: No such file or directory in D:\Websites\xampp\htdocs\bellewaerdefun\includes\config.inc.php on line 45
Fatal error: require_once() [function.require]: Failed opening required 'class.weather.php' (include_path='.;D:\Websites\xampp\php\PEAR/libs') in D:\Websites\xampp\htdocs\bellewaerdefun\includes\config.inc.php on line 45
Fatal error: require_once() [function.require]: Failed opening required 'class.weather.php' (include_path='.;D:\Websites\xampp\php\PEAR/libs') in D:\Websites\xampp\htdocs\bellewaerdefun\includes\config.inc.php on line 45
Ook het werken met $_SERVER['DOCUMENT_ROOT'] werkt niet. De __autoload() wordt in de map /includes uitgevoerd, terwijl de classes in de map /libs staat. Iemand die mij iets verder op weg kan helpen? Of is het beter om voor de makkelijke weg te kiezen: al mijn classes in de map /includes (wordt dus: /includes/libs/class.voorbeeld.php)?
Let ook op dat een pad dat begint met / een absoluut pad is. Waarschijnlijk bedoel je ./libs ('punt' is de huidige map, de current-work-directory, en dit is dus het pad naar de map libs in de huidige map)
?>
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
define('DS', DIRECTORY_SEPARATOR);
define('DOCROOT', 'C:'.DS.'xampp'.DS.'htdocs'.DS.'site'.DS); //path is hier C:/xampp/htdocs/site/ ff aanpassen naar je eigen root
function __autoload($class){
require_once DOCROOT. 'libs/class.' . $class . '.php';
}
?>
define('DS', DIRECTORY_SEPARATOR);
define('DOCROOT', 'C:'.DS.'xampp'.DS.'htdocs'.DS.'site'.DS); //path is hier C:/xampp/htdocs/site/ ff aanpassen naar je eigen root
function __autoload($class){
require_once DOCROOT. 'libs/class.' . $class . '.php';
}
?>
Gewijzigd op 19/04/2011 00:13:31 door Tim S
@Tim, waarom definieer je een constante met als inhoud een al bestaande constante?
Waarom gebruik je daar uberhaupt een constante wanneer je een windows-pad geeft, waar de separator altijd een backslash is.
TJVB tvb op 19/04/2011 09:02:26:
@Tim, waarom definieer je een constante met als inhoud een al bestaande constante?
Omdat ik die constant vaak gebruik, en DS nogal wat sneller typt als DIRECTORY_SEPARATOR en minder ruimte in beslag neemt op 1 regel. Dus fijner om te lezen (vind ik)
Tim S op 19/04/2011 09:30:06:
Omdat ik die constant vaak gebruik, en DS nogal wat sneller typt als DIRECTORY_SEPARATOR en minder ruimte in beslag neemt op 1 regel. Dus fijner om te lezen (vind ik)
En je code slechter overdraagbaar maakt omdat je een eigen constante gebruikt i.p.v. een standaard constante.
Quote:
Could not instantiate mail function
Bij m'n Yahoo Weather script wordt de volgende foutmelding weergegeven:
Quote:
Fatal error: Class 'weather' not found in D:\Websites\xampp\htdocs\bellewaerdefun\index.php on line 45
Wil dit nu zeggen dat de autoload nog steeds niet gelukt is? Of is er nog iets anders aan de hand? Het vreemde van het Yahoo Weather script is dat een bepaald script als gewone tekst lijkt te verschijnen:
Quote:
xml_obj = xml_parser_create(); xml_set_object($this->xml_obj,$this); xml_set_character_data_handler($this->xml_obj, 'dataHandler'); xml_set_element_handler($this->xml_obj, "startHandler", "endHandler"); } // *** ---------------------------------------------------------------- function parse($path){ if (!($fp = fopen($path, "r"))) { die("Cannot open XML data file: $path"); return false; } while ($data = fread($fp, 4096)) { if (!xml_parse($this->xml_obj, $data, feof($fp))) { die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($this->xml_obj)), xml_get_current_line_number($this->xml_obj))); xml_parser_free($this->xml_obj); } } return true; } // *** ---------------------------------------------------------------- function startHandler($parser, $name, $attribs){ $_content = array('name' => $name); if(!empty($attribs)) $_content['attrs'] = $attribs; array_push($this->output, $_content); } // *** ---------------------------------------------------------------- function dataHandler($parser, $data){ if(!empty($data)) { $_output_idx = count($this->output) - 1; $this->output[$_output_idx]['content'] = $data; } } // *** ---------------------------------------------------------------- function endHandler($parser, $name).............
'k Ben hier precies aan't sukkelen!
Edit: print screen met de errorprint screen met de error
Gewijzigd op 19/04/2011 22:07:51 door Sam Clauw
Php openingstag vergeten?
Of shorttags.