通过远程主机

时间:2015-11-11 09:45:05

标签: php file-get-contents

我有一个脚本,我不知道为什么以及如何运作 - 其中一个原因是我发现有关file_get_contents的矛盾信息。

我有三个(内部)网络服务器 - 所有设置方式相同,运行相同的软件。 我需要计算每台服务器上一个特定文件夹中的文件数(以便获取登录到某个应用程序的用户数)。

对于本地服务器,我的文件计数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

<?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;


?>

2 个答案:

答案 0 :(得分:0)

file_get_contents()将返回本地文件的原始内容。对于远程文件,它将返回Web服务器提供的内容。如果Web服务器在文件中执行脚本,它将获得该脚本的结果。如果Web服务器没有执行文件中的脚本(例如,由于配置错误),您仍将获得远程脚本的原始内容。

在你的情况下,我只是删除包含路径,只需通过http获取所有脚本。它降低了通过http调用三个脚本之一的复杂性和开销,而不是直接加载它可以忽略不计。

答案 1 :(得分:0)

如果给出了url,

file_get_contents()将执行GET,如果给定文件系统路径,则将读取文件。它就像来自同一个呼叫的两个不同的功能。 您实际上正在构建一个原始的REST Web服务,而不是实际加载文件,执行远程文件,如果您从浏览器手动加载它们,您将获得输出