PHP schreibzugriff bei Windows servern!

Alles, was PHP betrifft, kann hier besprochen werden.

PHP schreibzugriff bei Windows servern!

Postby Wobbix1 » 19. June 2006 13:07

Hallo Apache Freunde!

Ich versuche nun schon seid einiger zeit Mittels PHP lese bzw Schreibzugriff zu erlangen.

Folgendes problem:
Habe eine Datei die in eine Text datei schreiben soll, dieses aber nicht tut.
Durch mein rumprobieren habe ich nun rausgefunden, das ich PHP wohl keine schreibberechtigung erteilt habe .

Wie kann ich die schreibberechtigung setzen ?? Per charmad funktioniert es ja nun bei Windows nicht!

Danke schon mal im vorraus für eure Hilfe

MFG Wobbix
Wobbix1
 
Posts: 6
Joined: 19. June 2006 11:29

Postby Wiedmann » 19. June 2006 13:20

Habe eine Datei die in eine Text datei schreiben soll, dieses aber nicht tut.

Dann zeig doch mal einen Beispielcode der nicht tut.

Durch mein rumprobieren habe ich nun rausgefunden, das ich PHP wohl keine schreibberechtigung erteilt habe .

Eher selten bei Windows, die hat man eigentlich automatisch. Vor allem mit dem Apache. Welchen Webserver benutzt du denn?
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Wobbix1 » 19. June 2006 13:33

Na der hier zum beispiel:
Code: Select all
<?php
   //starte Session, falls nicht schon passiert
         session_start();
         // Wert des assoziativen Arrays mit Artikelnummer
         // als Schlüssel um eins eröhen
         if (isset ($artikel)) $_SESSION['korb'] [$artikel]++;
?>
<html>
   <body>
         <h1>Warenkorb</h1>
         Sie haben bisher folgende Artikel ausgewählt: <p>
      <?php
        // zeige alle bisher ausgewählten Artikel an
         foreach ($_SESSION ['korb'] as
            $artikel => $anzahl) {
            print "Artikelnummer: $artikel<br>";
                 print "Anzahl: $anzahl<br>";
                 if ($artikel == 1001)
                    print "Der Herr der Ringe<p>";
      if ($artikel == 2002)
                    print "Der kleine Hobbit<p>";
                 if ($artikel == 3003)
                    print "Grimms Märchen<p>";
                 if ($artikel == 4004)
                    print "Elric von Melnibonee <p>";
                         }
                    ?>
         </body>
</html>
der ist aus einem webdesign fernstudium
ansonsten scripte die fopen und fputs benutzen.
Ganzdeutlich wir es wenn ich die setupdatei von phpmyadmin aufrufe. dabekomme ich diese meldung:
Can not load or save configuration
Please create web server writable folder config in phpMyAdmin toplevel directory as described in documentation. Otherwise you will be only able to download or display it.
Wobbix1
 
Posts: 6
Joined: 19. June 2006 11:29

Postby Wobbix1 » 19. June 2006 13:34

Achso ... vielleicht solte ich noch dazusagen, das es auf dem bereitgestellten webspace funktioniert!
Wobbix1
 
Posts: 6
Joined: 19. June 2006 11:29

Postby Wiedmann » 19. June 2006 13:57

Na der hier zum beispiel:

Das Script schreibt aber nirgends in eine Datei (mal abgesehen von den Sessiondateien. Stimmt dein "tmp_dir"?)? Was macht dieses Script denn nicht?
Scheint aber eh ein seltsames Script zu sein: Überprüft z.B. am Anfang eine Variable auf Existenz, die ja auf "normalen" Servern an dieser Stelle nie existent sein kann... Ergo wird die Aktion im IF nie ausgeführt.

ansonsten scripte die fopen und fputs benutzen.

Hättest vielleicht mal so ein Script gezeigt... Darauf bezog sich ja die ursprüngliche Frage. So ein Script was "nicht tut" kann man ja in 5-6 Zeilen schreiben.

Can not load or save configuration
Please create web server writable folder config in phpMyAdmin toplevel directory as described in documentation. Otherwise you will be only able to download or display it.

Zu dem Setupscript vom phpMyAdmin kann ich nichts sagen. Das hab ich noch nie benutzt. (Hast denn das "config"-Dir angelegt das der da will?

BTW:
Hab's ja schonmal gefragt... Was hast denn für einen Webserver? PHP-Version (Installationsart)?
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Wobbix1 » 19. June 2006 14:15

Hier mal Das einfache foren script auf einem ?funktiopnierendem? webspace:
http://www.10026888.wavelearn.de/forum.php

und hier nun auf meinem Privaten zuhause (win XP sp2, Xampp 1.5.3a):
http://sgd.id-maker.de/forum.php

kannst ja mal ausprobieren.

Das script forum.php
<?php
include ("forumfunktionen.php");
if (isset ($text)) beitrag_hinzufuegen();

include ("beitraege.php");
?>
<html>
<head>
<title> Forum</title>
</head></html>
<body>
<h1> Willkomen beim Forum </h1>
<b>Sagen Sie uns Ihre Meinung!</b><p/>
<?php formular_anzeigen()?>
<hr>
<?php
for ($i=0; $i < count ($beitrag); $i++) {
beitrag_ausgeben ($beitrag[$i]);
}
?>
</body>
</html>

Die include dateien:
<?php
function beitrag_ausgeben ($beitrag) {
print "<b>Betreff:</b> ";
print "<b>".$beitrag ["betreff"]."</b>";
print "<br><b>Beitrag:</b> ";
print $beitrag ["text"];
print "<br><b>Autor:</b> ";
print $beitrag ["autor"];
print "<hr>";
}

function beitrag_hinzufuegen () {
global $betreff, $text, $autor;

$texte = file ("beitraege.txt");
$neuer_text = str_replace ("\n", "", $text);
$letzter_textindex = count ($texte)-3;
if (trim($texte[$letzter_textindex]) !=$neuer_text) {
$datei = fopen ("beitraege.txt", "a");
fputs ($datei, "$betreff");
fputs ($datei, "\n$neuer_text\n");
fputs ($datei, "$autor\n");
fclose ($datei);
}
}
function formular_anzeigen () {
?>
<form action="forum.php" method="POST">
Betreff:<input type="text" size="20" name="betreff" value="kein betreff"><br>
Text: <textarea cols="50" rows="10" size="50" name="text"></textarea><br>
Autor: <input type="text" size=20 name="autor">
<p><input type="submit" value="Abschicken">
</form>
<?php
}
?>

und die :
<?php
$datei = fopen ("beitraege.txt", "r");
$i = 0;
while (!feof($datei)) {
$beitrag[$i]["betreff"] = fgets ($datei, 1024);
$beitrag[$i]["text"] = fgets ($datei, 1024);
$beitrag[$i]["autor"] =fgets ($datei, 1024);
$i++;
}
fclose ($datei);
?>

Und die text datei aus der gelens und geschrieben werden soll !
ist natürlich leer!
Wobbix1
 
Posts: 6
Joined: 19. June 2006 11:29

Postby Wiedmann » 19. June 2006 14:32

Hier mal Das einfache foren script auf einem ?funktiopnierendem? webspace:

Sagen wir eher, dass dessen Konfig nicht aktuell ist, und der Programmierstil der Scripte schon seit ein paar Jahren überholt...

<?php
...
if (isset ($text)) beitrag_hinzufuegen();
...

Die Variable "$text" wird ja nirgends definiert, also wird beitrag_hinzufuegen() nie aufgerufen.

Selbst wenn diese aufgerufen würde:
neuer_text = str_replace ("\n", "", $text);
...
fputs ($datei, "$betreff");
fputs ($datei, "\n$neuer_text\n");
fputs ($datei, "$autor\n");

"$text", "$betreff" und "$autor" wird auch nirgends im Script vorher ein Wert zugewiesen...

BTW:
Dein Script funktioniert nicht, weil aktuelle Server (seit 4 Jahren) natürlich mit "register_globals = off" konfiguriert sind. Das wäre dann dein Stichwort für's PHP-Manual.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Wobbix1 » 19. June 2006 14:58

Allso erstmal die drei variabelen werden in dem formularfeldern definiert!
so weit so gut !

Auf dem "veraltert konfiguriertem" server läuft es so wie es soll!

Es liegt allso an versions unterschieden in der PHP programmierung!?
ist das richtig ?

jetzt intressiert es mich aber mal was die von SGD dazu sagen !lool
das wäre ja ne frechheit!

hast du mal einen tipp, wie ich dieses script auf einem neuen standard zum laufen bringe ??
Wobbix1
 
Posts: 6
Joined: 19. June 2006 11:29

Postby Wiedmann » 19. June 2006 15:09

Allso erstmal die drei variabelen werden in dem formularfeldern definiert!

Nicht ganz. In HTML werden nur Formualfelder definiert und keine PHP-Variablen ;-) Bei GET-Formularen werden die Feldnamen und Inhalte z.B. einfach als QueryParameter an die URI angehängt. Was dann der Empfänger dieses Requests daraus macht steht wieder auf einem anderen Blatt... Ganz früher wurden daraus allerdings mal direkte Variablen im Global-Scope vom Script. Da man so natürlich von aussen evtl. auch andere Variablen manipulieren kann, stellt dies ein Sicherheitsrisiko dar.

Seit ein paare Jahren landen die Werte der Formulalfelder auf jeden Fall in den Superglobalen-Arrays $_GET / $_POST usw. Je nach dem wie du das Formlar definiert hast.

hast du mal einen tipp, wie ich dieses script auf einem neuen standard zum laufen bringe ??

Siehe das vorherige Stichwort für's PHP-Manual. In diesem Fall solltest du dir das Kapitel über "externe Variablen" anschauen.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Wobbix1 » 19. June 2006 20:23

Danke nochmal für deine hilfe !
sie hat mir zumindest etwas weiter geholfen!

Habe jetzt testweite register_globals = on gesetzt. damit funktioniert auch das script wie im Lernheft beschrieben.

das ist aber nicht sin und zweck der sache, weil so sicherheitslücken entstehen ja ?
Wobbix1
 
Posts: 6
Joined: 19. June 2006 11:29

Postby Knight1 » 20. June 2006 05:37

Wobbix1 wrote:
<?php
function beitrag_ausgeben ($beitrag) {
print "<b>Betreff:</b> ";
print "<b>".$beitrag ["betreff"]."</b>";
print "<br><b>Beitrag:</b> ";
print $beitrag ["text"];
print "<br><b>Autor:</b> ";
print $beitrag ["autor"];
print "<hr>";
}

function beitrag_hinzufuegen () {
global $betreff, $text, $autor;

$texte = file ("beitraege.txt");
$neuer_text = str_replace ("\n", "", $text);
$letzter_textindex = count ($texte)-3;
if (trim($texte[$letzter_textindex]) !=$neuer_text) {
$datei = fopen ("beitraege.txt", "a");
fputs ($datei, "$betreff");
fputs ($datei, "\n$neuer_text\n");
fputs ($datei, "$autor\n");
fclose ($datei);
}
}
function formular_anzeigen () {
?>
<form action="forum.php" method="POST">
Betreff:<input type="text" size="20" name="betreff" value="kein betreff"><br>
Text: <textarea cols="50" rows="10" size="50" name="text"></textarea><br>
Autor: <input type="text" size=20 name="autor">
<p><input type="submit" value="Abschicken">
</form>
<?php
}
?>



Da Windows zwischen Binär- und Textdateien unterscheidet musst Du bei der funktion fopen() in folgender Zeile
$datei = fopen ("beitraege.txt", "a");
noch das Binärattribut b an das a ranhängen. Sieht dann also folgendermaßen aus:
$datei = fopen ("beitraege.txt", "ab");

Du möchtest zwar eine Text-Datei schreiben/öffnen, aber einen versuch ist es wert. denke ich.


Kai aka Knight1
Image
User avatar
Knight1
 
Posts: 310
Joined: 18. October 2003 10:03
Location: Trier
Operating System: Windows 7 Ultimate x64


Return to PHP

Who is online

Users browsing this forum: No registered users and 5 guests