C'est encore moi
Bon alors, par où commencer...
Tout d'abord merci stopher, tu m'as envoyé dans la bonne direction je pense. J'ai un script qui a l'air de fonctionner puis que le reste du site n'est plus bloqué. Cependant, j'ai besoin d'un peu plus de limières car mes connaissances en php sont assez limités, et mes connaissances en *nix le sont encore plus... Du coup, je ne comprends absolument pas ce que je fais
Voici mon script de base qui va chercher les messages:
header('Content-Type: text/html; charset=ISO-8859-15');
require_once '../../../../inc/php/AutoLoad.php';
$wId = $_POST[ 'w' ];
$tmp = explode( '_', $wId );
$senderId = $tmp[ 1 ];
$receiverId = $tmp[ 2 ];
$messages = NULL;
while ( $messages == NULL )
{
$messages = $context->MessageManager->GetUnreadMessages( $senderId, $receiverId );
}
$sender = $context->UserManager->Get( $senderId );
$receiver = $context->UserManager->Get( $receiverId );
echo '( [ ';
for ( $i = 0; $i < count( $messages ); $i++ )
{
echo '{ "Id": "' . $messages[ $i ]->Id . '", "SenderUserName": "' . $sender->UserName . '", "SentAtGmt": "' . $messages[ $i ]->SentAtGmt . '", "Message": "' . $messages[ $i ]->Message . '" }';
if ( $i != count( $messages ) - 1 )
echo ', ';
}
echo ' ] )';
Ce script me retourne 1 ou plusieurs messages sous la forme d'objets JSON, mais comme je l'ai dit avant, ce script bloque le site entier.
J'ai donc copié (en partie) l'exemple trouvé sur
cette page, ce qui me donne:
header('Content-Type: text/html; charset=ISO-8859-15');
require_once '../../../../inc/php/AutoLoad.php';
declare ( ticks = 1 );
$pid = pcntl_fork();
if ( $pid == -1 )
{
die( "impossible de forker" );
}
else if ( $pid )
{
exit(); // nous sommes le processus père
}
else
{
// nous sommes le processus fils
}
// détachons le processus du terminal
if ( posix_setsid() == -1 )
{
die("impossible de se détacher du terminal");
}
$wId = $_REQUEST[ 'w' ];
$tmp = explode( '_', $wId );
$senderId = $tmp[ 1 ];
$receiverId = $tmp[ 2 ];
$messages = NULL;
while ( $messages == NULL )
{
$messages = $context->MessageManager->GetUnreadMessages( $senderId, $receiverId );
}
$sender = $context->UserManager->Get( $senderId );
$receiver = $context->UserManager->Get( $receiverId );
echo '( [ ';
for ( $i = 0; $i < count( $messages ); $i++ )
{
echo '{ "Id": "' . $messages[ $i ]->Id . '", "SenderUserName": "' . $sender->UserName . '", "SentAtGmt": "' . $messages[ $i ]->SentAtGmt . '", "Message": "' . $messages[ $i ]->Message . '" }';
if ( $i != count( $messages ) - 1 )
echo ', ';
}
echo ' ] )';
Et voilà, le script ne bloque plus le site et fonctionne presque comme je le veux.
Maintenant, 2 problèmes:
1 - Je ne sais absolument pas ce que je fais, et je pense que le code pourrait être plus élégant, mais je ne sais pas comment puisque je ne le comprends pas

pourriez-vous svp me reformatter ça de façon plus intélligente? Je sais que je vous demande de faire le travail à ma place et j'ai un peu honte, mais vraiment ça m'enleverait une grosse épine du pied

2 - Un fois que le script trouve les messages, l'output retourné contient d'autres éléments qui n'étaient pas la avant, voici de quoi je parle:
X-Powered-By: PHP/5.2.10 Content-Type: text/html; charset=ISO-8859-15 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache ( [ { "Id": "8b8208b7-e88b-5c73-6b32-229bd621c882", "SenderUserName": "Seb", "SentAtGmt": "2009-11-15 13:55:55", "Message": "test" } ] )
La partie en gras étant la partie que je voudrais supprimer.
Voilà, un grand merci d'avance!