2017-08-22 3 views
0

Je possède ce petit script (background.php):Contexte exec() et de l'écriture sur le disque

<?php 

    $url = urldecode($_SERVER['argv'][1]); 
    $id = $_SERVER['argv'][2]; 
    $name = $id.'.mp4'; 
    $proof = $id.'.proof'; 

    // Download 
    file_put_contents("temp/$name", fopen($url, 'r')); 
    file_put_contents("temp/$proof", ""); 

?> 

Je veux courir en arrière-plan.

Cas 1

Si je fais exec('php download.php my_url id > /dev/null &'); il fonctionne en arrière-plan, mais ne télécharge rien.

Cas n ° 2

Si je exec('php download.php my_url id >> temp/loging.log &'); télécharge le fichier, mais pas en arrière-plan (lors du téléchargement de ma page Web est « chargement »).

Quelqu'un peut-il m'aider?


Remarque

Je courais le php sous Windows avec UniServerZ.

+0

Y at-il une chance que le script produise une sortie non redirigée vers votre fichier journal, tel qu'un avertissement ou une erreur? avez-vous vérifié que php a la permission d'écrire dans le dossier et tel? Avez-vous essayé de produire une sortie pour vérifier qu'elle est correctement ajoutée au fichier journal? – Kaddath

+0

La sortie va en effet dans le fichier journal. Les autorisations: ça devrait être ok, n'est-ce pas, puisque le script télécharge le fichier dans le cas 2. – Colas

+0

je pensais plus aux permissions pour écrire le journal, mais le fait qu'il le fasse répond à la question .. désolé, pas d'autre idée pour le moment – Kaddath

Répondre

0

Si vous utilisez Windows, cela ne fonctionnera pas.

Vous devez faire

pclose(popen('start /B cmd /C "php download.php my_url id >NUL 2>NUL"', 'r')); 

Je ne suis pas sûr de ce que /B et /C représentent.