Rewritemaps

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Rewritemaps

    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
    Code:
    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
    Code:
    RewriteRule ^profile-(.*)$ profile.php?id=${users:$1} [NC,L]
    users.php
    PHP-Code:
    #!/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
    Gruß
    Uzu

    private Homepage

  • #2
    Re: Rewritemaps

    [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 ...?
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      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
      Gruß
      Uzu

      private Homepage

      Kommentar


      • #4
        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?
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          OffTopic:
          Welcome back! :-)
          [FONT="Helvetica"]twitter.com/unset[/FONT]

          Shitstorm Podcast – Wöchentliches Auskotzen

          Kommentar


          • #6
            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
            Gruß
            Uzu

            private Homepage

            Kommentar


            • #7
              Original geschrieben von unset
              OffTopic:
              Welcome back! :-)
              OffTopic:
              danke


              ich habe es hinbekommen 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
              PHP-Code:
              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
              PHP-Code:
              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
              Gruß
              Uzu

              private Homepage

              Kommentar


              • #8
                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 ...
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  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.
                  Code:
                  RewriteRule ^profile-(.*)$ profile.php?lookup=${users:$1} [NC,L]
                  Gruß
                  Uzu

                  private Homepage

                  Kommentar


                  • #10
                    anhang:
                    Angehängte Dateien
                    Gruß
                    Uzu

                    private Homepage

                    Kommentar


                    • #11
                      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.
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        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
                        Gruß
                        Uzu

                        private Homepage

                        Kommentar

                        Lädt...
                        X