Как запускать скрипт PHP, если сервер вызывает его

У меня есть PHP-скрипт, и это будет выполняться только в том случае, если сам сервер называет его. Например: form (). Submit запускает запрос AJAX для отправки данных формы. Я не хочу разрабатывать хэш-декодирование и кодировать систему для подтверждения, если запрос разрешен или нет.

Есть ли простая возможность проверить, работает ли «сервер для запуска сценария» или клиент хочет запустить скрипт? Если нет, я могу использовать .htpasswd

Если вы используете apache, вы можете поместить свои скрипты в папку и добавить файл htaccess (.htaccess) со следующим содержимым

deny from all 

Таким образом, когда пользователь пытается получить доступ к скрипту php напрямую, он получит только запрещенную страницу. Вы можете обращаться к файлам только с помощью include / require методов скрипта php, используемых на сервере.

Вы можете сделать это с помощью следующих шагов;

1) Поместите ваш php-скрипт вне вашего веб-документа root как /usr/local/phpscripts/

2) Запустите этот скрипт из своего кода;

 $output = shell_exec('php /usr/local/phpscripts/your_script.php'); 

Делая это, только ваш сервер может вызвать ваш скрипт. Веб-пользователь не может получить доступ к этому скрипту php для выполнения

Скрипты, доступные пользовательскому агенту, должны находиться внутри docroot, иначе они полностью недоступны. Предполагая, что это структура вашего проекта:

 public_html/ |-- index.php src/ |-- somefile.php 

и если ваш корень документа установлен в каталог public_html (через конфигурацию vhost), файлы внутри src не могут быть доступны агентом пользователя. Поэтому только сервер может запускать их, требуя их в других сценариях.

Если вы хотите, чтобы ваш скрипт выполнялся при include() вы можете установить переменную в скрипте include() и проверить его в этом.

script1.php:

 <?php $my_call = true; include('script2.php'); 

script2.php: (сценарий, который вы не хотите вызывать из браузера)

 <?php if(!$my_call){die('Access Denied.');} //your code here... 

В противном случае, если вы хотите использовать сценарий только из командной строки:

добавьте эту строку в самом начале вашего скрипта:

 <?php if(php_sapi_name() !== 'cli'){die('Access denied.');} // your code next 

Для комментариев ниже:

 [root@xxxxx html]# cat test.php <?php echo php_sapi_name(); [root@xxxxx html]# php test.php cli 

Теперь вызов этого же скрипта из браузера:

 apache2handler