Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Rewritemaps [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Rewritemaps


 
UzumakiNaruto
26-01-2009, 00:59 
 
Hi,

ich bastel gerade an Rewritemaps damit ich "schönere" urls bauen kann.
leider funktioniert alles nicht gerade so wie ich mir das vorstelle.

wenn ich die webseite folgendermaßen aufrufe erscheint beim erstenmal eine weiße seite. jedes echo in der users.php wird igoriert.

http://www.example.de/profile-UzumakiNaruto

vhost config
RewriteLock ***/rewritelock.txt
<VirtualHost *:80>
ServerName ***
DocumentRoot ***
RewriteEngine On
RewriteMap users "prg:/usr/bin/php ***/users.php"
ErrorLog /var/log/apache2/error.***.log
LogLevel warn
CustomLog /var/log/apache2/access.***.log combined
</VirtualHost>

.htaccess im documentroot
RewriteRule ^profile-(.*)$ profile.php?id=${users:$1} [NC,L]

users.php
#!/usr/bin/php
<?php
mysql_connect($db_host,$db_user,$db_pass);
mysql_select_db($db_name);

$filename = "log.txt";
if (!$handle = fopen("$filename", "a+")) {
echo "Cannot open file ($filename)";
exit;
}

while( $url = trim(fgets(STDIN))) {
$sql = sprintf("SELECT user_id FROM ".DB_PREFIX."users WHERE user_name = '%s'", mysql_real_escape_string($username));
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$id = $row['user_id'];
$today = date("j-n-Y, G:i:s");
if (fwrite($handle, $today."|".$url."|rn") === FALSE) {
echo "Cannot write to file (".$filename.")";
exit;
}
if(fwrite(STDOUT, $id.".html\r\n") === FALSE) {
fwrite($handle, "CANT WRITE $urln");
}
}
fclose($handle);
exit;
?>

danke für eurer hilfe schonmal im voraus

 
wahsaga
26-01-2009, 01:05 
 
[i]wenn ich die webseite folgendermaßen aufrufe erscheint beim erstenmal eine weiße seite.[/B]
Und die Logs sagen was dazu?
jedes echo in der users.php wird igoriert.
Na wo sollte die Ausgabe eines solchen echos denn auch landen ...?

 
UzumakiNaruto
26-01-2009, 01:18 
 
ErrorLog /var/log/apache2/error.***.log sagt
File does not exist: asdf, referer: http://www.example.de/news

und das echo soll mir irgendwie eine ausgabe bringen .. sei es auf der weißen seite oder in den log dateien

die rewritelock.txt datei ist leer und die $filename = "log.txt"; wurde noch nicht erstellt.

ein normales rewritemap mit txt funktioniert .. aber ads ist gerade vorteilhaft wenn ich das mit txt machen würde

 
wahsaga
26-01-2009, 01:36 
 
Original geschrieben von UzumakiNaruto
ErrorLog /var/log/apache2/error.***.log sagt
File does not exist: asdf, referer: http://www.example.de/news
Und, sollte "asdf" denn existieren?
und das echo soll mir irgendwie eine ausgabe bringen .. sei es auf der weißen seite oder in den log dateien
Na ja, ich fuerchte, das RewriteMap-Script wird in einer Umgebung ausgefuehrt, wo kein "Platz" fuer solche Debug-Ausgaben ist.
Es hat auf STDOUT entweder einen Substitionswert fuer den umzuschreiben URL-Part zu liefern, oder NULL.

Wenn du von da aus Debugausgaben haben willst - dann wuerde ich vielleicht eher error_log() nehmen, und in ein definiertes Logfile schreiben lassen.
die rewritelock.txt datei ist leer
Bin mir nicht sicher, ob da irgendwelche Ausgaben drin zu erwarten waeren - das wird doch, soweit ich erkennen kann, nur fuer's Locking benutzt.
und die $filename = "log.txt"; wurde noch nicht erstellt.
Und wenn du das Script erst mal nicht als RewriteMap aufrufen laesst - sondern normal ueber den PHP-Kommandozeileninterpreter ausfuehren laesst?

 
unset
26-01-2009, 01:56 
 
Welcome back! :-)

 
UzumakiNaruto
26-01-2009, 02:03 
 
Und, sollte "asdf" denn existieren?
nein .. habe auch alle php dateien mit grep -R 'asdf' * durchsucht .. nichts gefunden

Und wenn du das Script erst mal nicht als RewriteMap aufrufen laesst - sondern normal ueber den PHP-Kommandozeileninterpreter ausfuehren laesst?

Could not open input file: das bekomme ich dann

 
UzumakiNaruto
27-01-2009, 08:53 
 
Original geschrieben von unset
Welcome back! :-)

danke

ich habe es hinbekommen :huep: aber leider nur einmal.
habe dann nochmal nachgelesen und apache führt das script auch nur einmal aus und muss dann in einer endlosschleife mitlaufen.

nur wenn ich das alles in eine endlosschleife packen will passiert gar nichts mehr

einmal lauffähig
set_time_limit(0); # forever program!
$users = fopen("php://stdin","r");
$username = trim(fgets($users));
$result = mysql_query(sprintf("SELECT user_id FROM ".DB_PREFIX."users WHERE user_name = '%s'", mysql_real_escape_string($username)));
$row = mysql_fetch_assoc($result);
echo $row['user_id'];

keinmal lauffähig
set_time_limit(0); # forever program!
while (1) {
$users = fopen("php://stdin","r");
$username = trim(fgets($users));
$result = mysql_query(sprintf("SELECT user_id FROM ".DB_PREFIX."users WHERE user_name = '%s'", mysql_real_escape_string($username)));
$row = mysql_fetch_assoc($result);
echo $row['user_id'];
}

der rewritelog sagt nicht mal "map ok" .. er bleibt genau eine zeile davor stehen und wartet .. und wartet .. und wartet

habt ihr noch ideen?

danke im voraus

 
wahsaga
27-01-2009, 13:52 
 
Warum denn jetzt wieder eine einfache echo-Ausgabe? Ich bin mir nicht sicher, ob das mit einer Ausgabe auf STDOUT identisch ist.

Und dann steht in der mod_rewrite-Doku noch "A common mistake is to use buffered I/O on stdout."
Vielleicht muesste man die Ausgabe noch explizit flushen ...

 
UzumakiNaruto
27-01-2009, 17:33 
 
http://de.php.net/manual/de/wrappers.php.php
php://output allows you to write to the output buffer mechanism in the same way as print() and echo().

hier die logs als zip .. habe unwichtige daten wie ip, zeit und pfad entfernt.

in der *_ok.log geht es gleich weiter .. auch wenn er sein ergebnis hat.
RewriteRule ^profile-(.*)$ profile.php?lookup=${users:$1} [NC,L]

 
UzumakiNaruto
27-01-2009, 17:34 
 
anhang:

 
wahsaga
27-01-2009, 17:53 
 
Original geschrieben von UzumakiNaruto
php://output allows you to write to the output buffer mechanism in the same way as print() and echo().
Schoen - aber ich bezweifle, ob php://output und php://stdout das gleiche sind.

 
UzumakiNaruto
27-01-2009, 23:14 
 
Original geschrieben von wahsaga
Schoen - aber ich bezweifle, ob php://output und php://stdout das gleiche sind.

huch .. verdammt .. zu schnell gelesen.

aber das echo klappt wenn ich nur EINE id ausgeben lasse.
die endlosschleife will dagegen gar nicht arbeiten.

habe es vorhin auch mit $stdout = fopen('php://stdout", "w"); frwite($stdout, $userid); probiert .. ohne ergebnis


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:36 Uhr.