2017-08-11 6 views
0

J'essaie de faire un script php qui télécharge un exécutable avec curl. Jusqu'à présent, je suis en mesure de télécharger le fichier, mais après le téléchargement, le fichier n'est pas exécutable (c'est à dire si vous exécutez php wp-cli.phar rien ne se passe). Je réalise qu'il s'agit d'un comportement attendu pour prévenir les risques de sécurité, alors comment dire à Curl que je veux que le fichier téléchargé soit traité comme un exécutable? La commande équivalente de la ligne de commande est: curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.pharTélécharger un fichier .phar exécutable avec php et curl

Ceci est mon code, qui tente de mettre en œuvre la commande ci-dessus dans un script php, mais le fichier résultant n'est pas exécutable:

set_time_limit(0); 
$fp = fopen ('./wp-cli.phar', 'w+'); 
$ch = curl_init('https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar'); 
curl_setopt($ch, CURLOPT_TIMEOUT, 50); 
curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_exec($ch); 
curl_close($ch); 
fclose($fp); 

INFORMATIONS SUPPLÉMENTAIRES
Si vous souhaitez reproduire l'erreur, créez un fichier appelé a.php avec le contenu ci-dessus. Ensuite, exécutez php a.php et puis exécutez php wp-cli.phar --info

+2

Quand vous dites "rien ne se passe", que voulez-vous dire? Vous obtenez aucune sortie de l'exécution de cette commande? Vérifiez les autorisations et le propriétaire/groupe du fichier. Est-il même exécutable par l'utilisateur exécutant 'php'? Le fichier téléchargé se trouve-t-il dans le même répertoire relatif que celui où vous essayez de l'exécuter? – Andy

+1

Créer un fichier ne le rend pas automatiquement un exécutable, vous devez changer les permissions ('chmod 775 filename' sur Linux CLI) –

+0

@Andy Par" rien ne se passe "Je veux dire que je n'ai pas de sortie, oui, comme si je tapais une commande vide. Les permissions du fichier sont '-rw-r - r -' et j'en suis le propriétaire. Oui, je cours les deux scripts (celui que vous voyez et celui téléchargé) du même répertoire, les deux sont là. @NigelRen Toujours le même. Je l'ai même essayé avec la fonction 'chmod' de php avant. –

Répondre

0

Essayez ce code ci-dessous, c'est actuellement ce que nous utilisons pour télécharger des fichiers à partir d'une URL.

public function downloadFile($url, $filepath){ 
    $fp = fopen($filepath, 'w+'); 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); 
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
    curl_setopt($ch, CURLOPT_FILE, $fp); 
    curl_exec($ch); 
    curl_close($ch); 
    fclose($fp); 

    return (filesize($filepath) > 0)? true : false; 
} 
+0

Je viens de tester votre fonction, merci pour le partage, mais toujours le même comportement avec le fichier créé comme ceci 'downloadFile ('https://raw.githubusercontent.com/wp-cli/builds/gh-pages /phar/wp-cli.phar ',' wp-cli.phar '); ' –

+0

@GeorgeDimitriadis J'ai répondu à votre message original. Cela n'a rien à voir avec la façon dont vous le téléchargez. C'est à voir avec le fait que vous ne pouvez pas l'exécuter - pas d'autorisations exécutables sur le fichier. – Andy