Как вызвать PHP с другого сервера с помощью сценария оболочки? У меня есть сценарии PHP и оболочки, 2 файла хранятся на разных серверах.
У меня есть такой сценарий:
#!/bin/bash
php "http://example.com/csv_import.php"
Но когда я запускаю эту команду вручную, я получаю ошибку: Could not open input
Как правильно вызвать PHP с помощью сценария оболочки?
Где ты хочешь выполнять скрипт PHP? Если он находится на другом сервере, вам просто нужно нажать на соответствующий URL:
curl "http://example.com/csv_import.php"
Или, если требуется запрос POST,
curl -XPOST "http://example.com/csv_import.php"
Это довольно просто.
Однако, если вы хотите скачать скрипт PHP и запустите его этот сервер, вы находитесь в немного более сложной ситуации. Во-первых, вы должны убедиться, что удаленный сервер отправляет фактическое сценарий, вместо запуска сценария и отправки результата, как это было бы в нормальной ситуации (или, возможно, у вас есть сценарий, который при обработке выводит другой сценарий). Как правило, это можно сделать, отключив синтаксический анализ PHP на своем веб-сервере или изменив расширение файла на нестандартное (возможно, просто .txt
).
Теперь вы хотите загрузить этот сценарий и передать его с исполняемым файлом PHP на локальном компьютере. Сначала убедитесь, что он работает, запустив curl
выше и проверяя, что вывод фактически является самим сценарием PHP. Если вы этого достигли, то что-нибудь простое, например
curl "http://example.com/csv_import.php.txt" | php
должен сделать свое дело.
Сложность на другом конце.
Если вы не можете отключить синтаксический анализ PHP на другом конце, вы можете получить файл PHP оттуда другим способом, например scp
или rsync
, а затем выполнить его локально.
Вы используете любой HTTP-клиент командной строки, например curl
или wget
сделать HTTP-запрос.
Можешь попробовать
#!/usr/local/bin/php
Т.е. Первый аргумент php, если он не похож на параметр, - это имя исполняемого файла PHP, а -q - только CGI.