PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Script zur erstellung einer Datei


hoschy
09.11.2005, 18:56:09
Hallo mal wieder :),

ich hab ein Problem mit folgendem Script:

<?php
if(isset ($submit)){
define ('_CWD', getcwd().'/');
define ('_FN', '../db.php');
define ('_NL', "\n");
if (!is_writable(_CWD)) die ('<b>Error: darf nicht ins Verzeichnis schreiben</b>');
if (!$fp = fopen(_CWD._FN,'w')) die ('<b>Error: darf $filename nicht schreiben</b>');
$conf = '<'.'?php'._NL;
$conf .= '# Inhalt des Configfiles' ._NL;
$conf .= define("MYSQL_HOST", $host, _NL);
$conf .= define("MYSQL_LOGIN", $user, _NL);
$conf .= define("MYSQL_PASSWORD", $pass, _NL);
$conf .= define("MYSQ_DATABASE", $data, _NL);
$conf .= '$connect = @mysql_connect(MYSQL_HOST, MYSQL_LOGIN, MYSQL_PASSWORD) or die("Konnte keine Verbindung zum Datenbankserver aufbauen!");' ._NL;
$conf .= '$selectDB = @mysql_select_db(MYSQL_DATABASE, $connect) or die("Konnte die Datenbank <b>$dbName</b> nicht auswählen!");' ._NL;
$conf .= '# Tabellenbezeichner' ._NL;
$conf .= sprintf ('$%s = "%s";%s', 'table_prefix', $table_prefix, _NL);
$conf .= '?'.'>';
fwrite($fp,$conf,strlen($conf));
flock($fp,2);
fclose($fp); }
?>

Das script erstellt die gewünschte datei nicht. eine Fehlermeldung wird ebenfalls nicht angezeigt. Die notwendigen Rechte sind gesetzt.

Und error_reporting(E_ALL); bringt auch kein Ergebnis.

|Coding
09.11.2005, 19:07:08
Scheinbar wird der Code durch das Absenden eines Formulars ausgeführt.

Daher versuch es mal mit den Superglobalen. Sprich aus:

if(isset ($submit)){

Wird:

if(isset ($_POST['submit'])){

meikel (†)
09.11.2005, 19:22:34
eine Fehlermeldung wird ebenfalls nicht angezeigt.
Eine? Die Zeilen sind semantisch und syntaktisch falsch:
$conf .= define("MYSQL_HOST", $host, _NL);
$conf .= define("MYSQL_LOGIN", $user, _NL);
$conf .= define("MYSQL_PASSWORD", $pass, _NL);
$conf .= define("MYSQ_DATABASE", $data, _NL);
int define ( string name, mixed value [, int case_insensitive] )
Und
[quote]define() gibt bei erfolgreicher Zuweisung TRUE, sonst FALSE zurück.
Wenn sich define() an dem falschen 3. Parameter ("\n" dürfte wenig mit "int case_insensitive" zu tun haben) nicht stört, speicherst Du dann in $conf 4* den Wert true ab.

Das ist auch reichlich merkwürdig:
define ('_CWD', getcwd().'/');
define ('_FN', '../db.php');
define ('_NL', "\n");
if (!is_writable(_CWD)) die ('<b>Error: darf nicht ins Verzeichnis schreiben</b>');
if (!$fp = fopen(_CWD._FN,'w')) die ('<b>Error: darf $filename nicht schreiben</b>');
Du testest _CWD auf Beschreibbarkeit und definierst den Filepointer für ein anderes Verzeichnis, daß dann auch noch ungefähr so aussieht:
/pafd/zum/script/../db.php
Daß sich PHP darüber nicht aufregt, kann ich mir kaum vorstellen.

hoschy
09.11.2005, 19:24:40
Eine? Die Zeilen sind semantisch und syntaktisch falsch:
$conf .= define("MYSQL_HOST", $host, _NL);
$conf .= define("MYSQL_LOGIN", $user, _NL);
$conf .= define("MYSQL_PASSWORD", $pass, _NL);
$conf .= define("MYSQ_DATABASE", $data, _NL);
[quote]int define ( string name, mixed value [, int case_insensitive] )
Und

Wenn sich define() an dem falschen 3. Parameter ("\n" dürfte wenig mit "int case_insensitive" zu tun haben) nicht stört, speicherst Du dann in $conf 4* den Wert true ab.

Das ist auch reichlich merkwürdig:
define ('_CWD', getcwd().'/');
define ('_FN', '../db.php');
define ('_NL', "\n");
if (!is_writable(_CWD)) die ('<b>Error: darf nicht ins Verzeichnis schreiben</b>');
if (!$fp = fopen(_CWD._FN,'w')) die ('<b>Error: darf $filename nicht schreiben</b>');
Du testest _CWD auf Beschreibbarkeit und definierst den Filepointer für ein anderes Verzeichnis, daß dann auch noch ungefähr so aussieht:
/pafd/zum/script/../db.php
Daß sich PHP darüber nicht aufregt, kann ich mir kaum vorstellen.


Das Script befindet sich in einem Ordner und die zu erstellende Datei sol ein verzeichnis höher angelegt werden

meikel (†)
09.11.2005, 19:47:39
Das Script befindet sich in einem Ordner und die zu erstellende Datei sol ein verzeichnis höher angelegt werden
Dann mußte ein wenig "Pfadarithmetik" veranstalten.

<?php
if(isset ($_POST['submit']))
{

$CWD = getcwd();
$CWD = substr($CWD, 0, strrpos($CWD, '/')) . '/';

define ('_CWD', $CWD);
define ('_FN', 'db.php');
define ('_NL', "\n");
if (!is_writable(_CWD)) die (sprintf('<b>Error: darf nicht ins Verzeichnis %s schreiben</b>', _CWD));
if (!$fp = fopen(_CWD._FN, 'w')) die (sprintf('<b>Error: darf %s nicht schreiben</b>', _CWD . _FN));

$conf = '<'.'?php'._NL;
$conf .= '# Inhalt des Configfiles' ._NL;
$conf .= "define('MYSQL_HOST', '$host');" . _NL;
$conf .= "define('MYSQL_LOGIN', '$user');" . _NL;
$conf .= "define('MYSQL_PASSWORD', '$pass');" . _NL;
$conf .= "define('MYSQ_DATABASE', '$data');" . _NL;
$conf .= '$connect = @mysql_connect(MYSQL_HOST, MYSQL_LOGIN, MYSQL_PASSWORD) or die("Konnte keine Verbindung zum Datenbankserver aufbauen!");' ._NL;
$conf .= '$selectDB = @mysql_select_db(MYSQL_DATABASE, $connect) or die("Konnte die Datenbank <b>$dbName</b> nicht auswählen!");' ._NL;
$conf .= '# Tabellenbezeichner' ._NL;
$conf .= sprintf ('$%s = "%s";%s', 'table_prefix', $table_prefix, _NL);
$conf .= '?'.'>';
fwrite($fp,$conf,strlen($conf));
fclose($fp);

}
?>
So oder so ähnlich...