J'ai essayé d'ouvrir un fichier avec la fonction fopen() en PHP et l'avertissement de sortie de l'ouverture de flux: permission refusée. Vous connaissez cet avertissement/erreur que vous rencontrez lorsque Apache n'a pas assez de privilèges pour ouvrir un fichier particulier.Pourquoi y a-t-il un avertissement d'autorisation refusée mais avec succès l'ouverture du fichier?
Cependant, malgré l'affichage du message d'avertissement, mon script PHP a réussi à ouvrir le fichier et y a écrit une chaîne. Cela n'a pas de sens.
Alors qu'est-ce que la matière? Je peux mettre un @ immédiatement avant fopen() mais c'est quand même bizarre et je veux savoir pourquoi PHP se comporte de cette façon. Y at-il quelque chose que je n'ai pas configuré correctement?
class XMLDB {
private $file = null;
private $xml = null;
private $defs = array();
private $recs = array();
// private members above, public members below
public function __construct($xmlfile) {
if (!file_exists($xmlfile)) {
die('XML file does not exist.');
}
$this -> file = $xmlfile;
$this -> xml = simplexml_load_file($this -> file);
$this -> iniVocab();
$this -> iniData();
}
.../* beaucoup de fonctions publiques et privées */
public function commit() {
$xmlfile = fopen($this -> file, 'w'); // this is causing the warning
$doc = new DOMDocument('1.0');
$doc -> preserveWhiteSpace = false;
$doc -> loadXML($this -> xml -> asXML());
$doc -> formatOutput = true;
fwrite($xmlfile, $doc->saveXML());
}
public function __destruct() {
$this -> commit();
/* comment this line out and there won't be any warnings,
/* therefore it should trace back to here. So I found out that
/* it's when I use die() that eventually calls __destruct()
/* which in turn calls commit() to trigger this fopen warning. */
}
}
EDIT: Donc, chaque première fois que j'essaie d'écrire quelque chose dans le fichier ouvert, il est bon. Ensuite, si la classe essaie à nouveau de valider toutes les modifications du fichier lorsque la page est déchargée, c'est-à-dire l'objet à détruire, elle appelle la méthode __destruct() et $ this -> commit() pour écrire les modifications dans le fichier - C'est quand l'erreur se produit et il refuse d'écrire dans le fichier et de diffuser le message d'autorisation refusé. C'est étrange.
Quelle version de PHP et OS utilisez-vous? – txyoji
Debian 5.0 Lenny et PHP 5.2.6 C'est vraiment bizarre. J'ai juste essayé de chmod 777 le dossier à écrire et PHP pompe toujours l'avertissement refusé d'autorisation. Pourtant, l'opération est réussie. –
Apache 2. Le fichier est assigné au groupe de données www qui est Apache. Que les permissions soient 666 ou 660, peu importe. L'opération est réussie mais PHP continue à donner l'avertissement. –