【问题标题】:create variable only once in php在php中只创建一次变量
【发布时间】:2016-06-27 00:27:44
【问题描述】:

我一直在寻找一种在 php 中只运行一次代码的方法。我想在网页的开头创建和设置一个变量,每当我调用该文件时,代码都会忽略该行。

我发现 this 基本上有两个建议:setting a session variablecreating a lock file 我不想这样做,因为可能同时有很多用户,我需要为每个用户设置一个锁定文件其中之一。

我尝试了第一个选项,但它不起作用。

这是我的两个文件:

config.php

<?php 
     if (at the beginning){
         $variable = something
         echo 'hello';
     }
     else
          do something
?>

second.php

<?php
     require_once 'config.php'    
     //do some other stuff
?>

每当调用 second.php 时,它都会在网页中打印 'hello',因此 if (at the beginning) 返回 true,即使它不是在开头。请注意,我检查是否以if(!isset($_SESSION['done'])){ $_SESSION['done'] = 'done'; }开头

我想知道我的错误是什么,我该如何解决这个问题。任何帮助表示赞赏。

【问题讨论】:

  • 您希望它在每个请求、每个会话、每年一次运行一次吗?
  • @RolandStarke:每当请求网页时,即每个打开网页的用户。
  • 所以缺少的否定只是一个错字?如果您做出影响程序行为的更改,请发表评论。
  • @syck: 是的,我直接从http://stackoverflow.com/a/9682456/2021883复制粘贴,他/她弄错了,我也警告过他/她。但它已经在我的代码中被否定了。
  • @smttsp 如果您只包含带有require_once 的文件,那么每个请求不应执行多次

标签: php session isset require-once


【解决方案1】:

config.php 的程序流程应该是:

<?php 
     session_start();

     if (!isset($_SESSION['done'])) {
         $_SESSION['done'] = 1;
         echo 'hello';
     }
     else {
         // do something
     }
?>

【讨论】:

  • session_start() 将只启动一次会话还是在调用文件时启动会话?我将从其他多个文件中调用config.php
  • @RolandStarke:是的,我总是require_once。非常感谢,现在可以使用了
  • session_start() 应该在每个请求中调用一次。但是由于你使用require_once(),config.php 不应该被执行超过一次。
  • 我不知道为什么,但它执行了多次。 if (!isset(....) echo 'first'); else{echo 'again???';}。第一次打印first,然后它总是打印again???。另外,我确定我总是用require_once 打电话。
  • 在单个脚本中运行?您可以使用 config.php 中的 debug-backtrace() 来找出哪个函数源自 require 语句。
猜你喜欢
  • 2016-02-29
  • 2016-11-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 2016-10-25
  • 2012-03-21
  • 2014-11-24
  • 2018-01-04
相关资源
最近更新 更多