Apache/PHP (Permission?) Probleme

J

Jan_Riggert

Neues Mitglied
Thread Starter
Dabei seit
07.04.2005
Beiträge
18
Reaktionspunkte
0
Hallo,

heute habe ich erfolgreich Apache zum ersten Mal gestartet und PHP4 von entropy.ch installiert.

PHP scheint auch zu laufen, so funktionieren einfach PHP Befehle wie phpinfo() oder echo() tadellos.

Sobald ich jedoch versuche mit PHP eine Textdatei (z.B. content.txt) zu schreiben, wird der neue Wert nie gespeichert.

Das Terminal sagt:
-rwxr-xr-x 1 jan_r jan_r 967 24 Feb 2004 admin.php
-rwxr-xr-x 1 jan_r jan_r 12 7 Apr 17:14 content.txt

Also hab ich 755 Rechte.

Was läuft falsch?

Wäre super dankbar für Hilfe.

Jan
 
Soweit ich weiss, musst Du auch noch der Usergruppe www Schreibrechte geben. Benutzt Du die Website für den ganzen Rechner oder die Benutzer-Site??
 
Also ich hab mal probeweise www Schreibrechte gegeben, aber das änderte nichts am Ergebnis.

Die Seite liegt unter: System/Users/jan_r/Web-Sites/demo/

Ich möchte die Seite auch nicht im LAN oder so freigeben.
Das soll lediglich mir als Webdesigner zum PHP Testen dienen.

Hmm…


Eben hab ich ein formmail.php verwendet und problemlos ein eMail von meinem Rechner an mich gesendet.
:)


Aber das Wichtigste, nämlich Textdateien zu schreiben geht immer noch nicht.
:(
 
Zuletzt bearbeitet:
Hast Du mal versucht allen Benutzern und Gruppen Lese&Schreibrechte zu geben? Ich hab unter Andere (ändere die Rechte über den Finder) Lese&Schreibrechte vergeben.
 
Ja, ich hab auch mal 777 vergeben. Aber ohne Erfolg.
 
Um im Dateisystem eine Datei beschreiben zu können, muß bei UNIX der Schreibende das Recht dazu besitzen. Um herauszufinden welcher Benutzer das ist, kannst Du einfach in der Ausgabe von phpinfo() im Abschnitt Apache nach dem Eintrag User/Group suchen. Im Normalfall ist das bei Mac OS der user www, aber nachlesen ist da sicherer! Dieser Benutzer muß Schreibrecht haben, dann geht es auch! Um ein Rechteproblem auszuschließen kannst Du ja auch eine Datei kurzfristig mit chmod 777 freigeben. Geht es dann immer noch nicht, hast Du ein anderes Problem, denn dann darf jeder in die Datei schreiben!

Ein anderes Problem könnte z.B. ein aktivierter safe_mode in der php.ini sein, erfährst Du auch in der Ausgabe von phpinfo()
 
User/Group www(70)/70

Und der Safe Mode ist Off.

Merkwürdig.
Ich poste gleich mal das Error Log.
 
Welche Rechte hat der enthaltende Ordner ?
 
Der Ordner hat 775.

Also das access_log hat als letzten Eintrag:
127.0.0.1 - - [07/Apr/2005:21:01:08 +0200] "POST /~jan_r/demo/data/admin.php HTTP/1.1" 200 213

Und das error_log hat nur ältere Einträge:
[Thu Apr 7 18:32:55 2005] [notice] Apache/1.3.33 (Darwin) PHP/4.3.10 configured -- resuming normal operations
[Thu Apr 7 18:32:55 2005] [notice] Accept mutex: flock (Default: flock)


Komisch…
 
Das Skript, das in die Datei schreiben soll, hast Du uns ja noch nicht gezeigt;
Vielleicht ist hier der Fehler zu suchen.
 
Gute Idee.
Jedoch lief es bereits problemlos auf meinem richtigen Server.

PHP:
<?php

//copyright 2005 by Jan Riggert


//bitte ‰ndern:

$anzahl_eintrage = '5';

//Start of program...


if (isset($content))
{

   $time = time();
   $datei = fopen("content.txt","w");
   if ($datei)
   {    
      $content = nl2br(stripslashes($content));
      fputs($datei, "$content");
      fclose($datei);
   }


echo "<font size=\"1\" face=\"verdana\">Alles gespeichert...</font>";


} 

else 
{


echo "<form action=\"admin.php\" method=\"post\"><textarea name=\"content\" cols=\"80\" rows=\"20\">";

$datei = fopen("content.txt","r");
if ($datei)
{
   while(!feof($datei))
   {
      $data = fgets($datei,255);
      $array = explode("<br />",$data);

          echo "$array[0]\n";
      
   }
}

echo "</textarea><br>
<input type=\"Submit\" name=\"\" value=\"Änderungen speichern\"> <input type=\"reset\"> </form>";

}




?>


Er speichert nie meinen neuen Text. Stattdessen wird immer der alte Text angezeigt.


edit: ich hab mal die PHP-Tags verwendet, zur besseren Lesbarkeit!
 
Zuletzt bearbeitet von einem Moderator:
Kann es sein, daß Du die POST-Variablen des Formulars gar nicht aus $_POST[] holst, wie ab PHP4 üblich? Wenn ja, dann mußt Du register_globals=on setzen!
Das ist aber ein Sicherheitsrisiko, Du soltest Dir $_POST und $_GET angewöhnen.
 
Ich kann dir grad nicht folgen.
Was soll ich an dem Skript ändern (ohne ein Sicherheitsrisiko einzugehen)?
 
Nicht am Skript!

Das übergeben von Variablen per

<input type='text' name='horst'>

führt nicht mehr zu einer Variablen $horst im aufgerufenen Skript!
Um dies alte Verfahren zu erreichen mußt Du in der php.ini

register_globals= on

setzen. Bei POST-Variablen findest Du die Werte im POST-Array wieder (ab PHP4):

$_POST['horst']

erklärt findest Du das hier:

http://www.php.net/manual/de/language.variables.predefined.php
 
Dein Skript ist zum einen unvollständig, zum anderen aber mit einer Menge Beiwerk versehen, durch die man sich ert mal durchkämpfen muss.
Es wäre besser, wenn Du ein kurzes aber lauffähiges Skript postest, dass das Grundproblem demonstriert, aber alles zum Beschreiben des Problems nicht erforderliche weglässt.
PHP:
<?php 

//copyright 2005 by Jan Riggert  // das ist für Dein Probem nicht wichtig

//bitte ‰ndern: // das auch nicht

$anzahl_eintrage = '5';  // das auch nicht

//Start of program... // das auch nicht


if (isset($content)) // $content ist nicht definiert, daher wird der if-Zweig nicht ausgeführt
{

$time = time(); // hier überflüssig
// ich würde prüfen, ob Du die Datei öffnen kannst
$datei = fopen("content.txt","w") or die "Kann die Datei ($datei) nicht öffnen.");
// und ob das schreiben erfolgreich ist
fputs($datei, "$content") or die "Schreiben fehlgeschlagen";
...
Zum Testen könntest Du in deinem Skript zB $content mit einem Beispieltext füllen ($content="Beispieltext";).
Dann siehst Du, ob es an den Globals liegt.

HTH
 
Okay hab das Skript mal umgeändert und erhalte nun folgende Fehlermeldung:
Parse error: parse error in /Users/jan_r/Sites/demo/data/admin.php on line 20

In Line 20 steht:
$datei = fopen("content.txt","w") or die "Kann die Datei ($datei) nicht öffnen.");

Schade dass ich nicht besser PHP kann, dann würde ich jetzt wissen was los ist…
;-)
 
register_globals=on ???

Hallo ich würde gerne mal die register_globals=on setzen.

Wie mache ich das?
Per Terminal?
Wie lautet der Befehl?

Vielen Dank für die Hilfe!
Jan
 
Du hast eine schließende Klammer ( vor dem Semikolon) zuviel!
schreib mal folgendes script:

PHP:
<?
  phpinfo();
?>

such darin nach dem Pfad zu Datei php.ini! darin findest Du den Vermerk

register_globals = off

den setzt Du auf on

speicherst und stopst /startest apache ( über Websharing z.B.)

fertig.
 
wegus schrieb:
Du hast eine schließende Klammer ( vor dem Semikolon) zuviel!

Nicht eine schließende zuviel, sondern eine öffnende zuwenig nach dem "die".
 
Hmm…

Hab in dem Verzeichnis /etc die Datei php.ini.default gefunden.
Aber (trotz Apache Neustart) sind die register globals laut phpinfo() immer noch Off.

?
 
Zurück
Oben Unten