[Apache] RewrteMap prg: werkt niet met een binary.

Pagina: 1
Acties:

  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 04-02 23:43

SA007

Moderator Tweaking
Topicstarter
Ik heb een programma in php en eenzelfde iets in c.
Het php programma werkt prima, het c programma doet niks (oneindig wachten).

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <dirent.h>
#include <readline/readline.h>
#include <readline/history.h>

int main() {
  char *buffer;

  while ((buffer = readline(NULL)) != NULL) {
    printf("_apache/error\n");
    continue;
  }

  return 0;
}


PHP:
1
2
3
4
5
6
7
#!/usr/bin/php
<?
  while (1) {
    readline("");
    echo "_apache/error\n";
  }
?>


Beide zijn executable, ook voor apache.

Voor beide is de apache code hetzelfde (ook het pad naar de executable)
Voor beide zijn de permissies hetzelfde (rwxr-xr-x)
Beide geven dezelfde output als ik:
executable < testfile > output doe

(Al blijft het php script hangen omdat die niet kijkt naar eof, maar dat boeit voor apache niet (getest))

Het desbetreffende apache stukje:
code:
1
2
3
4
RewriteEngine On
RewriteMap vhost prg:/etc/apache2/mapping.php
RewriteCond %{REQUEST_URI} !^/icons/
RewriteRule ^/(.*)$ /var/www/${vhost:%{SERVER_NAME}}/$1

Ik heb geen enkel idee waarom dit niet werkt, apache lijkt correct te starten, maar daarna geeft een pagina een oneindige wachttijd...

  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 19:01

LauPro

Prof Mierenneuke®

Beide programma's hebben een deathloop. De PHP-versie zal waarschijnlijk na 30 seconden afbreken maar de C-versie zal eindig doorgaan totdat er NULL uit readline() komt.

Wat is precies je doel? Sowieso lijkt me readline() in webapplicaties een contradictio.

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 04-02 23:43

SA007

Moderator Tweaking
Topicstarter
LauPro schreef op zondag 24 september 2006 @ 22:45:
Beide programma's hebben een deathloop. De PHP-versie zal waarschijnlijk na 30 seconden afbreken maar de C-versie zal eindig doorgaan totdat er NULL uit readline() komt.

Wat is precies je doel? Sowieso lijkt me readline() in webapplicaties een contradictio.
1. Het is geen webapplicatie, het is een onderdeel van apache zelf.
2. Als je de Doc van RewriteMap erbij pakt, onder het kopje "External rewriting program" zie je dat het programma moet blijven draaien, jouw deathloop staat daar nog leuk een keer in perl als voorbeeld.

[ Voor 35% gewijzigd door SA007 op 24-09-2006 23:12 ]


  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 04-02 23:43

SA007

Moderator Tweaking
Topicstarter
Het werkt:
Een toevoeging van fflush(stdout) deed het.
Als snap ik nog neit waarom hij het zonder niet gewoon deed, printf is line-buffered, dus zou je een flush moeten krijgen op het moment dat de regel eindigd, wat ik doe met de /n.
Ook zou er voor iets lezen van stdin automatisch een fflush gedaan moeten worden...
Maarjah, heb nu mijn script werkend (was veel groter en complexer dan het basic scriptje wat ik in de OP gaf)