Выполнение файла через file_get_contents на удаленном хосте

1

У меня есть сценарий, и я не знаю, почему и как он работает - одна из причин этого - я нашел противоречивую информацию о file_get_contents.

У меня есть три (внутренних) webservers - все настроено одинаково, запустив одно и то же программное обеспечение. Мне нужно подсчитать количество файлов в одной конкретной папке на каждом сервере (чтобы получить количество пользователей, зарегистрированных в определенном приложении).

Для локального сервера мой файл, подсчитывающий PHP-скрипт, вызывается простым include а для двух удаленных серверов я использую file_get_contents. В обоих случаях я ссылаюсь на один и тот же файл PHP. Это работает - я получаю правильное количество файлов для папки на каждом сервере.

Иногда вы читаете file_get_contents возвращает только содержимое файла, но не выполняет файл. В моем случае файл выполняется, и я получаю правильное количество файлов. Итак, я немного смущен, почему мои скрипты действительно работают.

Мои сценарии были сохранены на одном сервере. Я хочу быть более гибким и иметь возможность вызывать скрипты с каждого сервера. Поэтому я создал новый виртуальный каталог в сетевой папке и переместил туда файлы сценариев, виртуальная папка имеет одинаковые настройки на каждом сервере. Мне пришлось немного изменить свой сценарий, чтобы снова получить тот же результат. Вместо return $num меня теперь есть echo $num. Если я использую return я не получу результат, если я использую echo указано правильное количество файлов. Я бы предпочел получить результат через return - но я не знаю, почему это больше не работает в новом контексте.

скрипт, который показывает количество файлов:

function getUserNum($basis_url_server, $url_vaw_scripte, $script_number_users)

{

    $serverName = strtoupper($_SERVER['SERVER_NAME']);
    //local server
    if(strpos(strtoupper($basis_url_server),$serverName) !== false)
    {                           
        $numUsers = (include($script_number_users));                
    }
    //remote server
    else 
    {                       
        $path = $basis_url_server.$url_vaw_scripte.$script_number_users;    
        $numUsers = file_get_contents($path);                                                   
        //include($path);                                                   
    }   
    return $numUsers;
}

echo getUserNum($basis_url_server1, $url_vaw_scripte, $script_number_users)."($label_server1)";
echo getUserNum($basis_url_server2, $url_vaw_scripte, $script_number_users)."($label_server2)";
echo getUserNum($basis_url_server3, $url_vaw_scripte, $script_number_users)."($label_server3)";

скрипт для подсчета файлов ($script_number_users выше $script_number_users)

<?php
// 'include' only contains $fadSessionRepository = "E:\Repository\Session"
include dirname(__DIR__).'/vaw_settings.php';

$fi = new FilesystemIterator($pfadSessionRepository,    FilesystemIterator::SKIP_DOTS);

$number = (iterator_count($fi)-1)/2 ; 

//return $number;
echo $number;


?>
  • 0
    Привет, Элентриэль, Джеральд - большое спасибо за ваши ответы. Теперь я понимаю, как это должно работать. Я упростил свой сценарий, принимая во внимание подсказку Джеральда, хотя я все еще использую file_get_contents, но я больше не различаю его локальный или нет. Это работает для меня, большое спасибо, Роб
Теги:
file-get-contents

2 ответа

0

file_get_contents() выполнит GET, если ему задан url, и прочитает файл, если задан путь к файловой системе. Это похоже на 2 разные функции от одного и того же вызова. Фактически вы создаете примитивный веб-сервис REST вместо фактической загрузки файлов, как вы, удаленные файлы выполняются, и вы получаете вывод, который вы увидите, если вы вручную загрузили их из браузера

0

file_get_contents() вернет исходное содержимое локального файла. Для удаленных файлов он вернет то, что обеспечивает веб-сервер. Если веб-сервер выполнит скрипт в файле, он получит результат этого скрипта. Если веб-сервер не выполняет сценарий в файле (из-за неправильной конфигурации, например), вы все равно получите исходный контент удаленного сценария.

В вашем случае я просто удаляю путь include и просто извлекаю все скрипты через http. Это уменьшает сложность, и накладные расходы при вызове одного из трех скриптов через HTTP вместо его загрузки незначительны.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню