Bonjour,
J'aurais conseil à vous demander au sujet d'une petite problématique à laquelle je suis confronté.
Pour vous mettre en situation :
Admettons que j'ai un site bonjour.com, ou je permet à mes visiteurs de creer des sous domaines, pseudo.bonjour.com. Ceci leur permettrait d'upload des images, qui sont physiquement stocké sur un serveur static.bonjour.com. Donc dans les url pseudo.bonjour.com, les url des images uploadé sont static.bonjour.com/xxx/xxx.jpg. Le but est de modifier ces URL à la volé, sans dévoiler la véritable url.
Le htaccess vers un php qui renvoie l'image en fopen n'est pas envisageable, pour des soucis de perf évidemment.
Donc en fait la problématique de base c'est de pouvoir faire un daemon qui consommerait pas et qui capturerait STDIN pour renvoyer les bonnes URL.
Nous avons donc commencer à tester avec ca : un daemon qui serait lancé à chaque session apache pour chaque visiteur, qui ressemblait à ca :
Problème, consommation 100% du CPU.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 $fp = fopen("php://stdin", "r"); while (1) { if( trim(fgets($fp)) ) { // Traitement } }
On à test de bosser avec les signaux unix
On à trouvé ce bout de code sur le net, qui est parfait niveau perf, par contre le case STDIN qui est de nous ne fonctionne pas (ca aurait été trop beau), car il n'y à pas de signal STDIN.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 <?php declare(ticks = 1); // signal handler function function sig_handler($signo) { switch ($signo) { case SIGINT: // handle shutdown tasks echo "Interruption (CTRL+C)...\n"; //exit; break; case STDIN: echo "Ohoh\n"; default: // handle all other signals echo $signo."\n"; break; } } echo "Installing signal handler...\n"; // setup signal handlers pcntl_signal(SIGINT, "sig_handler"); }
Donc ma 1ere question est, est-ce qu'il est possible de générer un signal au STDIN, que nous pourrions capturer dans le script ?
Sinon, on à pensé aux sockets, mais l'idée serait d'ouvrir un socket vers STDIN plutôt que vers un hôte, donc... comment faire ?
Je sais pas si j'ai été très clair, même pour moi ca reste assez obscur, je ne suis qu'un ptit dev php et l'utilisation des signaux, sockets etc remontent à très loin, en cours et en c++..
N'hésitez pas si vous avez des questions,
merci !
Partager