包含不适用于PHP中的$ _SESSION变量

时间:2016-02-21 14:57:16

标签: php

我正在尝试使用绝对网址包含文件:

<?
session_start();
$_SESSION['sr_path'] = 'http://domain.org/www/myapp';

include($_SESSION['sr_path'].'/assets/contact.php');
?>

但它不起作用。

有什么好主意的吗?

2 个答案:

答案 0 :(得分:1)

您按目录包含文件而不是网址:

def _Getch():
    fd = sys.stdin.fileno()
    old_settings = termios.tcgetattr(fd)
    try:
        tty.setraw(sys.stdin.fileno())
        ch = sys.stdin.read(1)
    finally:
        termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
        return ch

class xyctl:
    def _terminal_size():
        import fcntl, struct
        h, w, hp, wp = struct.unpack('HHHH',
            fcntl.ioctl(0, termios.TIOCGWINSZ,
            struct.pack('HHHH', 0, 0, 0, 0)))
        return w, h, w * h

    def _matrix_calc(adj_x, adj_y):
        cur_x, cur_y = xyctl.getter()
        new_x, new_y = (
            (cur_x + adj_x),
            (cur_y + adj_y)
        )

        if (new_x * new_y) < (xyctl._terminal_size()[2]):
            return new_x, new_y
        else:
            _writer(CHAR_BEL)

    def getter():
        _writer(CHAR_ESC + "[6n")
        pos = until("R", raw=True)
        _writer(CHAR_CRR + CHAR_SPC * (len(pos) + 1) + CHAR_CRR)
        pos = pos[2:].split(";")
        pos[0], pos[1] = int(pos[1]), int(pos[0])
        return pos

    def setter(new_x, new_y):
        _writer(CHAR_ESC + "[{};{}H".format(new_x, new_y))

    def adjust(adj_x, adj_y):
        new_x, new_y = xyctl._matrix_calc(adj_x, adj_y)
        xyctl.setter(new_x, new_y)

include(dirname(__FILE__).'/assets/contact.php');

其中include(dirname(__FILE__).'/contact.php'); 获取当前文件的路径,您可以在其中编写此代码。

或者你可以在你的网站index.php页面中定义常量,并在任何地方使用这个const:

dirname(__FILE__)

然后在任何这样的目录中使用它:

define('ROOT', dirname(__FILE__));

答案 1 :(得分:1)

您当前正在尝试通过URL而不是服务器上的路径来包含文件。默认情况下,您不能使用“HTTP”包装器,否则您将收到此警告(或类似): stdin

虽然您可以按网址添加文件,但通常最好在服务器上包含路径。

如果你确实想要继续使用当前的方法,并将存储在不同服务器上的内容包含在运行脚本的服务器上,则需要通过将'allow_url_include'设置为{{1}来更新配置}}

PHP Docs for include指定:

  

如果在PHP中启用了“URL include wrappers”,则可以使用URL指定要包含的文件(通过HTTP或其他受支持的包装器 - 请参阅支持的协议和包装器以获取协议列表)而不是本地路径名。

但值得注意的是,如果您使用HTTP,您可能依赖远程服务器为您处理PHP脚本并将其返回到您的脚本。正如文档所述:

  

可以在远程服务器上处理远程文件(取决于文件扩展名和远程服务器是否运行PHP的事实),但它仍然必须生成有效的PHP脚本,因为它将在本地服务器上处理。

澄清:

  

...脚本实际上是在远程服务器上运行,然后结果被包含在本地脚本中。

<强> TL; DR

我猜你真正想做什么,假设你试图包含的脚本与正在执行包含的脚本位于同一服务器上,就是在服务器上给出它的路径,例如: http:// wrapper is disabled in the server configuration by allow_url_include=0 看起来像这样:

1

而不是:

/var/www/myapp/assets/contact.php