我最近刚刚使用php:7.4-fpm-buster接管了一个我们试图放置在docker中的项目。以前使用旧版本的PHP,因此$ _SESSION变量在项目中大量使用。这是我的PHP文件中失败的代码:
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
...和...
unset($_SESSION['ListOfRoutings']);
我还回显了sys_get_temp_dir(),它说它是/ tmp,它还说它正在写入的文件夹是可写的。我得到的错误:
Notice: Undefined variable: _SESSION in /usr/local/src/arc-bis/basketdesign/scripts/ListOfRoutings.php on line 96
96行是未设置的 call 。我还取出了if语句,它不会创建 session 。有没有办法让$ _SESSION使用docker创建一个只有tmp目录的变量?我试图在docker中创建一个tmp目录,但这没有用。
提前致谢...
编辑:这是来自phpinfo的信息:
Session Support enabled Registered save handlers files user Registered serializer handlers php_serialize php php_binary DirectiveLocal ValueMaster Value session.auto_startOffOff session.cache_expire180180 session.cache_limiternocachenocache session.cookie_domainno valueno value session.cookie_httponlyno valueno value session.cookie_lifetime00 session.cookie_path// session.cookie_samesiteno valueno value session.cookie_secure00 session.gc_divisor10001000 session.gc_maxlifetime72007200 session.gc_probability11 session.lazy_writeOnOn session.namePHPSESSIDPHPSESSID session.referer_checkno valueno value session.save_handlerno valueno value session.save_path/tmp/tmp session.serialize_handlerphpphp session.sid_bits_per_character44 session.sid_length3232 session.upload_progress.cleanupOnOn session.upload_progress.enabledOnOn session.upload_progress.freq1%1% session.upload_progress.min_freq11 session.upload_progress.namePHP_SESSION_UPLOAD_PROGRESSPHP_SESSION_UPLOAD_PROGRESS session.upload_progress.prefixupload_progress_upload_progress_ session.use_cookies11 session.use_only_cookies11 session.use_strict_mode00 session.use_trans_sid00
编辑:这是我尝试添加到Docker中的一些内容。项目的./根目录下有一个tmp文件夹。
FROM php:7.4-fpm-buster
...
COPY ./docker/php/php.ini /usr/local/etc/php/php.ini.template
COPY ./docker/php/php-fpm.conf /usr/local/etc/php-fpm.conf.template
...
RUN mkdir /usr/local/src/arc-bis
COPY ./* /usr/local/src/arc-bis/
RUN chown -R www-data:www-data /usr/local/src/arc-bis/
...
WORKDIR /usr/local/src/arc-bis
在我的docker文件夹内的php.ini文件上:
session.save_path = /usr/local/src/arc-bis
最佳答案
我认为您应该测试session_status()是否返回PHP_SESSION_DISABLED
当您从session_start查看Changelog时,您会发现:
7.1.0 session_start() now returns FALSE and no longer initializes $_SESSION when it failed to start the session.
所以也许您还应该检查session_start()的返回值
您还可以调用php_info()并检查 session 段,这可能是在您的Docker镜像上禁用了 session 的原因。也许您需要为docker镜像提供正确的配置
关于php - 未使用$ _SESSION变量创建Docker项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60191327/