mit fopen in übergeord. Ordner schreiben

WerOLF

Mitglied
Hallo,

wieder ein Problem von mir, welches für euch warscheinlich ganz einfach ist zu lösen (?).
Google hat keine verwertbaren Ergebnisse geliefert..

Mein Problem:

Mein Adminbereich liegt in:*

/content/admin

Die Datenbanken liegen in:*

/content/datenbanken

*Ausgehend vom CMS Verzeichniss.


im /content/admin liegt die Datei, welche eine Datenbank im Verzeichniss
/content/datenbanken erstellen soll.
Leider habe ich aber keine Lösung gefunden, wie ich nun dem Script beibringe, das er erst in ein anderes Verzeichniss wechseln muss.

Ich habe bereits probiert, in der Zeile: $fp = fopen ($savedb.".dat","w");
ihm zu sagen, das er erst in ../datenbanken wechseln muss:
$fp = fopen ('../datenbanken/,'$savedb.".dat","w");


Leider macht er das nicht, sondern gibt nur diesen Fehler aus:

Code:
Warning: fopen(../datenbanken/) [function.fopen]: failed to open stream: No such file or directory in C:\xampp\htdocs\cms\content\admin\content_create.php on line 11

Warning: flock() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\cms\content\admin\content_create.php on line 12

Warning: fputs(): supplied argument is not a valid stream resource in C:\xampp\htdocs\cms\content\admin\content_create.php on line 13

Warning: fclose(): supplied argument is not a valid stream resource in C:\xampp\htdocs\cms\content\admin\content_create.php on line 14
Daten gespeichert
(Zum "Daten gespeichert" : hat natürlich nichts zu sagen , Datei wird nicht erstellt.)

Das Script:

PHP:
<?php

// Datenbankname wurde übergeben, und wird nun
// über Include mti der  eigendlichen Datenbnak includet

$savedb = $_POST['pagename'];


if(isset($_POST['senden'])) 
{ 
	$fp = fopen('/',$savedb.".dat","w");  
	flock($fp, 2);  
	fputs($fp,$_POST['dbcont']);
	fclose($fp);  
	echo 'Daten gespeichert';
} 
else {
?>

Danke für eure Hilfe
 
Hi,

Bezugspunkt für Verzeichnisse ist nicht der Ordner in dem das Script läuft sondern der vom Server konfigurierte document_root.

Also:
PHP:
$file = $_SERVER["DOCUMENT_ROOT"]."/".$savedb.".dat";
$fp = fopen($file,"w");

Mit
die($file); den Pfad ausgeben um zu prüfen.

Gruß tyg3r
 
Probier mal Folgendes:
PHP:
$savedb = $_POST['pagename'];

if( isset($_POST['senden']) && isset($_POST['pagename']) && isset($_POST['dbcont']) ) {
	if( $_POST['pagename'] != ($_POST['pagename'] = basename($_POST['pagename'])) ) {
		// nicht erlaubter Wert, möglicher Manipulationsversuch
	}
	$fp = fopen($_SERVER['DOCUMENT_ROOT'].'/datenbanken/'.$_POST['pagename'].'.dat', 'w');
	flock($fp, 2);
	fputs($fp, $_POST['dbcont']);
	fclose($fp);
	echo 'Daten gespeichert';
}
 
Moin Gumbo,

vieln Dank für deine Hilfe, welche auch auf die Sicherheit bedacht ist :)

Eine kurze frage habe ich noch:

Ich bastel gerade nocheinmal an der Seite, wo man den Inhalt über ein mehrzeiliges Textfeld bearbeiten kann.
Damit es schöner aussieht, habe ich bereits ein paar Zeilen Code geschrieben, um mit der Funktion str_replace () die HTMLcodes durch Pseudocodes zu ersetzen:

PHP:
...
$pseudo = array("[ b ]","[ /b ]","[ i ]","[ /i ]","\r\n\r\n","ä","ö","ü","ß","Ä","Ö","Ü");
$html = array("<b>","</b>","<i>","</i>","<br><br>","&auml;","&ouml;","&uuml;","&szlig;","&Auml;","&Ouml;","Uuml;");

for($x=0;$x<3;$x++){
  $dbcontent = str_replace($html[$x],$pseudo[$x],$dbcontent);
}
print "$dbcontent";

Das Problem ist jedoch, das wenn ich die Datei über...

... include() einbinde, er er nur den Inhalt wiedergibt, aber nicht die HTMLcodes durch Pseudocodes ersetzt.

...print() einbinde, gibt er in dem Textfeld nur den Pfad zu der Datenbank aus, nicht die Datei selber.

...echo() einbinde, gibt er ebenfalls nur den Pfad im Textfeld aus.


Habt ihr eine Lösung ?
 
Zurück