2015-06-17 8 views
0

Я пытаюсь запустить сценарий оболочки в PHP на моем сервере, который использует youtube-dl для загрузки видео. Мой код выглядит следующим образом:Передача переменных GET в shell_exec в PHP

<form action="download.php" method="get"> 
<input type="text" name="link"><br> 
<input type="submit"> 
</form> 

и мой download.php выглядеть следующим образом:

<?php 
$link = escapeshellarg($GET["link"]); 
$output = shell_exec('/Applications/MAMP/cgi-bin/youtube-dl ' .$link. ' 2>&1'); 
echo "<pre>$output</pre>"; 
?> 

Так что, когда я вставить ссылку в моей форме, он должен передать ссылку на shell_exec и выполните команду с этой ссылкой, но я получил следующее:

Usage: youtube-dl [OPTIONS] URL [URL...] 

youtube-dl: error: You must provide at least one URL. 

Это означает, что команда не получила ссылку от GET. Как я могу это решить?

ответ

2

GET-параметры доступны через переменную $ _GET. Обратите внимание на подчеркивание перед «GET».

http://php.net/manual/en/reserved.variables.get.php

+0

Это похоже на работу, но теперь я получил другую ошибку: 'TypeError: execv() arg 2 должен содержать только строки' – Hyperion

0

Попробуйте один

shell_exec("/Applications/MAMP/cgi-bin/youtube-dl {$link} 2>&1"); 
+0

Тем не менее получить ту же ошибку – Hyperion

+0

Что вы получаете в переменной $ ссылок? –

0

Изменение

$link = escapeshellarg($GET["link"]); 

в

$link = escapeshellarg(urldecode($_GET["link"])); 

и убедитесь, что вы получаете URL в $_GET["link"]

Смежные вопросы