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
[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
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?
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
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:
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
|
|