【问题标题】:PHP session in Google App EngineGoogle App Engine 中的 PHP 会话
【发布时间】:2013-06-26 18:27:52
【问题描述】:

我正在尝试将 PHP 应用程序迁移到 Google App Engine 基础架构,并且我有一段类似的代码可以处理会话:

 <html>
     <head>
         <link type="text/css" rel="stylesheet" href="/stylesheets/main.css" />
     </head>
     <body>
             <?php
                 session_start();
             ?>
     </body>
 </html>

使用 GAE SDK 执行它时,我收到以下错误,并且会话不跟踪我之前设置的记录:

警告:file_get_contents():php_network_getaddresses:getaddrinfo 失败:不知道这样的主机。在 C:\Users\user\Downloads\google_appengine_1.8.1\google_appengine\php\sdk\google\appengine\runtime\RemoteApiProxy.php 第 92 行 警告:file_get_contents(http://localhost:63143):无法打开流:php_network_getaddresses:getaddrinfo 失败:不知道这样的主机。在 C:\Users\user\Downloads\google_appengine_1.8.1\google_appengine\php\sdk\google\appengine\runtime\RemoteApiProxy.php 第 92 行 注意:未定义的偏移量:0 在 C:\Users\user\Downloads\google_appengine_1.8.1\google_appengine\php\sdk\google\appengine\runtime\Memcache.php 行 564

我在php.ini 文件中设置了以下值:

session.save_handler = user
session.save_path = Memcache

有人知道我是否需要设置一些缺失的配置才能使用会话吗?

编辑:

我从项目文件夹中删除了php.ini文件,但仍然出现一些错误,上次没有出现2个不同的警告:

警告:file_get_contents():php_network_getaddresses:getaddrinfo 失败:不知道这样的主机。在 C:\Users\user\Downloads\google_appengine_1.8.1\google_appengine\php\sdk\google\appengine\runtime\RemoteApiProxy.php 第 92 行 警告:file_get_contents(http://localhost:50074):无法打开流:php_network_getaddresses:getaddrinfo 失败:不知道这样的主机。在 C:\Users\user\Downloads\google_appengine_1.8.1\google_appengine\php\sdk\google\appengine\runtime\RemoteApiProxy.php 第 92 行 警告:session_start():无法发送会话 cookie - 标头已由 C:\Users\user\Downloads\ 中的(输出开始于 C:\Users\user\Downloads\google_appengine_1.8.1\helloworld\helloworld.php:7)发送google_appengine_1.8.1\helloworld\helloworld.php 在第 8 行 警告:session_start():无法发送会话缓存限制器 - 标头已发送(输出开始于 C:\Users\user\Downloads\google_appengine_1.8.1\helloworld\helloworld.php:7)在 C:\Users\user\Downloads\ google_appengine_1.8.1\helloworld\helloworld.php 在第 8 行

我在 Windows 7 Enterprise x64、php-5.4.13-Win32-VC9-x86 和 google_appengine_1.8.1 上运行。

【问题讨论】:

  • 错误是它无法找到或打开localhost:63143 - 可能是本地主机的安全措施..

标签: php google-app-engine session


【解决方案1】:

如果有人再次点击此页面,但此处的解决方案不起作用,但出现“标头已发送”错误:

尝试另存为不带 BOM 的 UTF-8。这通常是一个空白错误,并且 BOM 通常被读取为在任何事情发生之前输出的字符。

【讨论】:

  • 另存为 UTF-8?什么是物料清单?
  • 您的源代码文件必须保存为没有 BOM 的 UTF-8(例如,notepad++ 可以为您做到这一点,但大多数 IDE 也可以)。至于 BOM,这是一个字节顺序标记,请在此处阅读更多信息:en.wikipedia.org/wiki/Byte_order_mark
【解决方案2】:

GAE PHP 中的会话会自动存储在 memcache 中,您无需进行任何配置。

您能否删除您的 php.ini 文件并查看问题是否仍然存在?

【讨论】:

  • 我从项目文件夹中删除了 php.ini 文件,但运行时仍然出现一些错误。
【解决方案3】:

您似乎发现了一个错误。具体来说,通过在 PHP.ini 中设置会话处理程序,PHP 解释器正在尝试直接通过网络访问 memcached 服务器,而不是 dev_appserver 提供的实现。

您是否介意在以下位置报告: https://code.google.com/p/googleappengine/issues/list?q=label:Language-PHP&sort=-stars

此外,Google App Engine 实际上默认使用 Memcache 进行会话,如https://developers.google.com/appengine/docs/php/#Sessions 中所述,无需任何自定义配置。

【讨论】:

  • session_start() 即使在从我的项目文件夹中删除 php.ini 文件后仍然无法正常工作,也许设置处理程序不是主要问题。
【解决方案4】:

在使用 Google App Engine 部署我的应用程序时,我也遇到了 php session_start() 函数的问题;我收到以下警告:
警告:session_start():无法发送会话 cookie - 标头已由...发送

警告:session_start():无法发送会话缓存限制器 - 标头已发送...

我终于明白 Google App Engine 会自动创建会话,因此您无需自己创建会话。

继续在会话变量中保留您想要的任何内容,然后尝试在其他地方检索它。你不会有任何错误。

这里要记住的是,您不需要自己使用 session_start() 启动会话,Google App Engine 已经启动了一个会话,因此您只需使用它即可。

【讨论】:

    【解决方案5】:

    实际上,错误是因为您应该从会话开始。
    session_start() 必须是代码中的第一件事。
    试试这个:

    <?php
      session_start();
    ?>
     <html>
         <head>
             <link type="text/css" rel="stylesheet" href="/stylesheets/main.css" />
         </head>
         <body>
    
         </body>
     </html>
    

    【讨论】:

      猜你喜欢
      • 2011-06-14
      • 1970-01-01
      • 2013-10-28
      • 2017-12-12
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      相关资源
      最近更新 更多