fopen funktioniert nicht

Ich habe ein script geschrieben um das pw in der .htpasswd datei zu ändern. soweit sio gut, jetzt versuchte ich das script auf einem anderen server auszuführen und es funktioniert nicht mehr.
PHP.net meint vllt ist open_basedir aktiviert whatever, wie kann ich das feststellen?

ich habe nur normalen ftp zugang - kann man das trotzdem irgendwie abfragen?
 
wird denn irgend ein Fehler ausgegeben? den solltest du evtl. mal posten....
und ja, es ist sehr gut möglich, dass die Funktion vom Hoster deaktiviert wurde...
 
werden bei dem Hoster überhaupt Fehler ausgegeben?

mach mal folgendes:
PHP:
error_reporting(E_ALL); //sorgt dafür, dass alle Fehler auch wirklich ausgegeben werden...
$file=fopen("filename.bla","r");
while(!feof($file))
{
  echo fgets($file,4096);
}
fclose($file);
 
failed to open stream: Permission denied
dann gibt er unendlich lang aus das fget und feof nicht geht weil kein valid stream ressource...
 
arrgh.. sry, vom Code her sollte es ja erstma ein Lese-Test werden (hab aus dem "w" mal schnell ein "r" gemacht...)

probier mal, ob du überhaupt lesend Zugriff bekommst...
(mit nun berichtigtem oben stehendem Script)


und dann die nächste Frage:
Wer ist Eigentümer der zu öffnenden Datei?
Wer ist Eigentümer des Scriptes?
Unter welchem User wird das Script ausgeführt?

hab mal eben ein Script geschrieben, welches die Fragen beantwortet...
PHP:
  error_reporting(E_ALL);
  $script=basename($_SERVER["PHP_SELF"]); 
  $other_file="test.php";
function permissions_string($file)
{
	$perms = fileperms($file);

	if (($perms & 0xC000) == 0xC000) {
		// Socket
		$info = 's';
	} elseif (($perms & 0xA000) == 0xA000) {
		// Symbolic Link
		$info = 'l';
	} elseif (($perms & 0x8000) == 0x8000) {
		// Regular
		$info = '-';
	} elseif (($perms & 0x6000) == 0x6000) {
		// Block special
		$info = 'b';
	} elseif (($perms & 0x4000) == 0x4000) {
		// Directory
		$info = 'd';
	} elseif (($perms & 0x2000) == 0x2000) {
		// Character special
		$info = 'c';
	} elseif (($perms & 0x1000) == 0x1000) {
		// FIFO pipe
		$info = 'p';
	} else {
		// Unknown
		$info = 'u';
	}

	// Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
				(($perms & 0x0800) ? 's' : 'x' ) :
				(($perms & 0x0800) ? 'S' : '-'));

	// Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
				(($perms & 0x0400) ? 's' : 'x' ) :
				(($perms & 0x0400) ? 'S' : '-'));

	// World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
				(($perms & 0x0200) ? 't' : 'x' ) :
				(($perms & 0x0200) ? 'T' : '-'));
return $info;
}

echo "<h1>script info</h1>";
$file=$script;
echo "<pre>
file		: ".$file."
owner-ID	: ".fileowner($file)." - ";
$user=posix_getpwuid(fileowner($file));
echo $user["name"]."
group-ID	: ".filegroup($file)." - ";
$group=posix_getgrgid(filegroup($file));
echo $group["name"]."
permission	: ".permissions_string($file)."
executed by 	: ". shell_exec("whoami")."</pre>";

echo "<h1>other file</h1>";
$file=$other_file;
echo "<pre>
file		: ".$file."
owner-ID	: ".fileowner($file)." - ";
$user=posix_getpwuid(fileowner($file));
echo $user["name"]."
group-ID	: ".filegroup($file)." - ";
$group=posix_getgrgid(filegroup($file));
echo $group["name"]."
permission	: ".permissions_string($file)."</pre>";

statt dem "test.php" bei $other_file setzt du deine .htaccess ein, die du bearbeiten willst...
 
also wenn ich das erstere mit "read" ausführe gibt er genau nichts aus. leere seite.

beim zweiten script kommt das raus:

script info

file : tester.php
owner-ID : 2487 - ap000026
group-ID : 1984 - ap000026
permission : -rw-r--r--
executed by :

other file

file : .htpasswd
owner-ID : 2487 - ap000026
group-ID : 1984 - ap000026
permission : -rw-r--r--

wobei ap000026 der login für ftp ist

heißt das, dass ich nur die Lese/Schreib Zugriff ändern muss?
 
Original von jami
also wenn ich das erstere mit "read" ausführe gibt er genau nichts aus. leere seite.
steht denn schon was in der Datei drin?
Lesen können sollte er's ja laut den Datei-Rechten, die das Script zurück gibt...

Original von jami
script info

file : tester.php
owner-ID : 2487 - ap000026
group-ID : 1984 - ap000026
permission : -rw-r--r--
executed by :

other file

file : .htpasswd
owner-ID : 2487 - ap000026
group-ID : 1984 - ap000026
permission : -rw-r--r--


heißt das, dass ich nur die Lese/Schreib Zugriff ändern muss?

wahrscheinlich schon.

leider wurde der shell_exec()-Befehl nicht ausgeführt... :-( (vieleicht von Sicherheitseinstellungen des Servers geblockt....)
Aber ich gehe einfach mal davon aus, dass die Scripte unter dem User www-data ausgeführt werden.

Du als User ap000026 hast als einziges das Recht zu schreiben, jedoch ausgeführt wird das Script von einem anderen User --> da musst du wohl mal der .htaccess-Datei weitere Zugriffsrechte geben - also chmod 666... auch wenn mir sowas immer Bauchschmerzen bereitet, wenn man jmd. anderem als dem Besitzer Schreibrechte gibt, aber da es die Server-Konfiguration wahrscheinlich nicht anders erlaubt, ist das die einzige Möglichkeit, die mir einfällt...

ansonsten könntest du höchstens die Datei mal mittels eines PHP-Scripts erzeugen, auf dass der Datei-Eigentümer dann hoffentlich ebenfalls der ist, unter dem das Script ausgeführt wird...
 
read geht, datei war leer.

Mit 666 funktionierts! Ist zwar sicher nicht die sicherste Methode, aber es funktioniert dafür...

Herzlichen Dank!
 
ne andere möglichkeit wäre ne ftp verbindung über php quasi aufzubauen und dadrüber die datei zu verändern. würde man sich das verändern der rechte sparen hat jedoch mehr aufwand.
 
Zurück
Oben