Question

Je me sers d'AJAX sur mon site et je voudrais montrer aux utilisateurs évolution d'un dossier qui est en cours de téléchargement par mon serveur.

Le téléchargement se fait par script délivre un pourcentage à la coquille . Je voudrais transmettre cette information à l'utilisateur en utilisant AJAX. Comment puis-je faire?

Merci pour toute aide et la direction.

J'espère que vos solutions ne comportent pas d'écrire dans un fichier texte et récupérer ce pourcentage à partir du fichier texte !! Trop sur la tête, je pense.

EDIT - Plus d'infos

Il est une commande Shell Linux - Fedora Core 10

.

Actuellement, c'est comment la sortie shell ressemble à:

[download]   9.9% of 10.09M at 10.62M/s ETA 00:00

Les variations en pourcentage et je souhaite saisir cela et l'envoyer à l'utilisateur qu'il change.

Pour exécuter cela, je fais usage de la fonction phps exec ().

Était-ce utile?

La solution

Au lieu de exec, vous pouvez utiliser popen . Cela vous donnera une poignée que vous utilisez avec fread pour saisir la sortie de votre commande génère comme il arrive.

Vous devez analyser les mises à jour, il fait à l'indicateur de pourcentage. Une fois que vous avez ces données, il y a quelques façons dont vous pouvez l'obtenir à un client, par exemple avec une poussée de style « comète », ou avoir un sondage de requête Ajax pour les mises à jour.

Autres conseils

Je ne l'ai pas essayé, mais je pense que cette approche fonctionnerait.

Vous avez besoin de trois pièces:

  1. Avoir la sortie de script shell son flux à netcat connecté à un port
  2. Avoir un script php écouter flux provenant dudit port pour les données entrantes, la mise à jour d'un enregistrement dans memcache ou une base de données w / le pourcentage terminé.
  3. Demandez à votre script web faire périodiquement des appels ajax, au serveur qui vérifie cette valeur dans votre magasin de back-end.

Je travaille sur un problème similaire. Je dois analyser la sortie de mon script shell de conversion vidéo. J'utilise et analyser la popen sortie du retour resource. Au début, je mais cela ne fgets pas reconnu les valeurs mises à jour comme de nouvelles lignes. J'ai donc créé une fonction simple qui prend une option afin que vous $arg_delimiter pouvez vérifier d'autres types de retour comme le retour cariage chr(13). Le code exemple est un peu modifié et non testé à cet effet parce que dans mon cas, ces fonctions étaient des méthodes sur mon objet analyseur.

function get_line ($arg_handle, $arg_delimiter = NULL)
{
  $delimiter = (NULL !== $arg_delimiter) ? $arg_delimiter : chr(10);
  $result    = array();

  while ( ! feof($arg_handle))
  {
    $currentCharacter = fgetc($arg_handle);

    if ($delimiter === $currentCharacter)
    {
      return implode('', $result);
    }

    $result[] = $currentCharacter;
  }

  return implode('', $result);
}

Je simplement boucle sur les résultats de la popen() comme ceci <=>:

  $command = '/usr/bin/yourcommand';
  $handle  = popen($command . ' 2>&1', 'r');

  while ( ! feof($handle))
  {
    $line = get_line($handle, chr(13));

    preg_match($yourParserRegex, $line, $data);

    if (count($data) > 0)
    {
      printf("<script type='text/javascript'>\n  //<![CDATA[\n    window.alert('Result: %s');\n  // ]]>\n</script>"
            ,$data[1]
            );
      flush();
    }

  }

Maintenant, tout ce que vous devez faire est de comprendre la substance comète.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top