Это форма, которая принимает пользовательский ввод (url):
<form method="post" action="/" accept-charset="utf-8">
<input type="search" name="url" placeholder="Enter a url" />
<button>Go</button>
</form>
Этот контроллер сохраняет значение пользовательского ввода (url) в переменной для использования в скрипте python.
$url = Input::get('url');
$name = shell_exec('path/to/python ' . base_path() . '/test.py ' . $url);
return $name;
Скрипт передает то, что вводит пользователь, и берет текст после косой черты и отображает его.
url = sys.argv[1]
name = url.split('/')[-1]
print(name)
Возвращаясь к PHP, он возвращает значение того, что было выполнено в скрипте Python. Если пользователь вводит url: http://example.com/file.png
он успешно вернет строку file.png
Все об этом работает, но я понимаю, что я ограничиваю себя, так как команда shell_exec
только собирается вставить строку, которая возвращается из скрипта python. Что мне нужно сделать, если я хочу вернуть несколько переменных?
url = sys.argv[1]
name = url.split('/')[-1]
test = "pass this text too!"
# ? what goes here ?
Поэтому HTML-страница должна теперь вернуть file.png
и pass this text too!
Мне нужно вернуть массив или json в python, а затем извлечь массив /json в PHP?
ПРИМЕЧАНИЕ. В этих примерах я знаю об уязвимостях/инъекциях безопасности, это урезанные версии моего фактического кода.
Вы можете вернуть массив, но убедитесь, что элементы не содержат разделителя. Как print(','.join(name, test))
. Или вы можете кодировать json как json.dumps([name, test])
, а затем анализировать json в PHP. Второй, конечно, лучше.
В этом случае ваш скрипт Python должен вернуть отформатированный ответ, что PHP-скрипт может правильно анализировать и определять переменные с их значениями
например, ваш код на Python должен возвращать что-то вроде этого:
file_name=file.png;file_extension=png;creation_date=1/1/2015;
После этого в вашем php-коде вы делаете необходимый материал
$varValues = explode(";", $PythonResult);
foreach($varValues as $vv) {
$temp = explode("=", $vv);
print 'Parameter : ' . $temp[0] . ' value : ' . $temp[1] . '<br />';
}