bestand openen bij __destruct gaat niet
Altijd als ik een bestand wil openen bij het afsluiten van het script, dan faalt hij altijd. Bij het onderzoeken heb ik ontdekt dat hij ineens niet meer in mijn map zit, maar in de apache map.
Dit is een beknopte weergave:
test.class.php
Code (php)
index.php
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
include_once("test.class.php");
$test = new test;
echo "read_this result: <br />";
echo $test->read_this();
echo "end class restult: <br />";
?>
include_once("test.class.php");
$test = new test;
echo "read_this result: <br />";
echo $test->read_this();
echo "end class restult: <br />";
?>
Als ik index.php aan roep, zou ik normaal 2 resultaten moeten zien. Maar ik zie er maar 1, die van read_this(). Dus bij het afsluiten van de class vindt hij het bestand dus niet.
Hoe kan ik dit oplossen? En wie kan me helpen?
Alvast bedankt!
manual: "The working directory in the script shutdown phase can be different with some SAPIs (e.g. Apache)."
Oftewel, gebruik een absoluut pad.
Quote vanuit de Oftewel, gebruik een absoluut pad.
Dit lukt ook niet? :(
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?PHP
class test{
private $cwd;
public function __construct(){
$this->cwd=getcwd();
}
public function read_this(){
if(file_exists($this->cwd . DIRECTORY_SEPARATOR . "template" . DIRECTORY_SEPARATOR . "template.tpl")){
echo "oke";
}else{
echo "niet oke";
}
}
public function __destruct(){
if(file_exists($this->cwd . DIRECTORY_SEPARATOR . "template" . DIRECTORY_SEPARATOR . "template.tpl")){
echo "oke";
}else{
echo "niet oke";
}
}
}
?>
class test{
private $cwd;
public function __construct(){
$this->cwd=getcwd();
}
public function read_this(){
if(file_exists($this->cwd . DIRECTORY_SEPARATOR . "template" . DIRECTORY_SEPARATOR . "template.tpl")){
echo "oke";
}else{
echo "niet oke";
}
}
public function __destruct(){
if(file_exists($this->cwd . DIRECTORY_SEPARATOR . "template" . DIRECTORY_SEPARATOR . "template.tpl")){
echo "oke";
}else{
echo "niet oke";
}
}
}
?>
Blijkbaar lukt het met $_SERVER["DOCUMENT_ROOT"] al. Hoe het kwam dat hij de eerste keer niet ging begrijp ik ook niet maar bon.
Maar al bij al vind ik de tweede manier veel handiger.
Bedankt voor de (meerdere) oplossing(en)!
Sowieso raad ik je aan zo min mogelijk __destruct() te gebruiken, omdat het soms heel onvoorspelbaar is wanneer dit wordt aangeroepen.
Ofzo :(
Bestaat er dan een andere manier?
mvg Kasper
Hoezo is dat lelijk? Je hebt toch gewoon bepaalde functionaliteit die je op het juiste moment oproept?
Bedankt voor jullie reacties!