我已经编程了近3个月,而且我刚学过php,而且我有一个问题:PHP有内存吗? 我的意思是,如果我使用表单创建一个新变量,当我刷新互联网页面时,该变量是否仍然存在?php是否有内存?
回答
您可以通过会话
//set session
session_start();
$_SESSION["test"] = "data33";
然后做到这一点,
//return session
session_start();
echo $_SESSION["test"];
或 “mateop” Saied如何操作:您可以使用Cookie来存储数据更长的时间:)
不,每个脚本的执行都是独立于以前的。在执行过程之间存储变量的唯一方法是使用会话,cookie或某种形式的数据库。是(和否)。
是(和否)。
万维网基本上是一个REST implementation。这意味着服务器不会保持活动状态来记住请求之间的状态(它是无状态)。
而且这与PHP的运行方式相匹配。一个PHP脚本只运行一会儿。浏览器请求一个URL,PHP脚本启动,生成输出并终止。任何在内存中的变量都会被遗忘。
因此,如果您需要记住某些内容,则必须将其发送回浏览器,并且浏览器必须将其重新发回给您,以便下一次请求。
您可以通过几种方法来实现。
链接。如果你在PHP中输出一个内部链接,你可以在那里添加变量(例如'name'),所以你的url变成
example.com/page.php?name=bob
。这不是非常方便,因为网址中有很多垃圾。此外,具有特定值的网址存储在浏览器的历史记录中,因此用户可以轻易地和无意中浏览到具有过时值的网址。饼干。众所周知,并且比链接中的变量更容易,更方便用户使用。您可以在服务器上用PHP设置一个cookie,并将其与客户端(浏览器)的响应一起发送。浏览器将发送每个新请求的Cookie。所以你可以将变量存储在那里,它将被保存。您可以使用
setcookie
函数在PHP中设置cookie,并且您可以使用$_COOKIE
读取cookie。
现在,Cookie有其限制。它们不能很大。此外,该变量可能包含您不希望发送到浏览器的信息,因为它是机密信息。
为了解决这个问题,你只需要在cookie中发送一个唯一的代码,通过它你可以识别出下一个请求属于同一个会话。使用这个会话ID,您可以找到单独存储在服务器上的变量。
现在,您可以自己实施这些会话,基本上如我所述。只需生成一个唯一的ID,并将所需的所有信息存储在文件或数据库中,并链接到该ID。该ID被发送到浏览器并使用cookie返回。
但幸运的是,PHP可以帮助你做到这一点,它有几个函数可以让你开始一个会话并记住某些变量,直到下一个请求。
它以函数session_start()开头。有了这个功能,你开始一个会话。 PHP将检查cookie是否包含会话ID,并将前一个请求的变量加载到超全局$_SESSION
中。如果没有会话存在,则会生成一个新的唯一会话ID并将其添加到cookie中,并且$_SESSION
被初始化为空数组。
所以在这之后,你可以使用超全局存储中值:
<?php
session_start();
if (!array_key_exists('start', $_SESSION))
$_SESSION['start'] = time(); // Save the start time of the session
echo 'This session started at ' . date($_SESSION['start'])
. '. And now it is ' . date(time()) . '.';
如果您通过浏览器打开上面的脚本,并刷新页面,你会看到刷新之间的时间变化,而原始的开始时间被保存并一遍又一遍地显示。因此,虽然PHP不记得正常变量,但您可以使用会话来保留特定值。
这些功能的详细说明可以在PHP: Sessions中找到。
HTTP是一种无状态协议,它意味着在页面刷新后服务器甚至不记得请求来自哪里。 -
http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
为了解决这个问题,我们有会话 - http://php.net/manual/en/book.session.php(此链接了所有的细节)
你需要在这些基础工作,您的问题将得到解答。按照这篇文章中的链接开始。
参考代码如下: -
<?php
session_start();
if(isset($_SESSION['var']))
echo $_SESSION['var'];
else
$_SESSION["var"] = "hello";
?>
- 1. 是否有内存SQS?
- 2. 是否有log4net内存appender?
- 3. 是否有可能读取PHP进程的整个内存?
- 4. PHP是否存在
- 5. 使用UIReferenceLibraryViewController是否有内存泄漏?
- 6. 它是否有内存泄漏?
- 7. 内存的kfree部分是否有效?
- 8. 熊猫是否加入内存有效?
- 9. 是否可以释放现有内存?
- 10. 新对象是否有内存泄漏?
- 11. sqlite3_exec是否有内存泄漏?
- 12. 是否有python2.7的内存分析器?
- 13. Async.StartChild是否有内存泄漏?
- 14. Aysncpro 2010是否有内存泄漏?
- 15. GPU上是否有内存保护
- 16. Linux中是否有内存泄漏?
- 17. DrawingContext.DrawText是否有内存泄漏?
- 18. 进程是否有自己的内存?
- 19. Spring ThreadLocalTargetSource - 这是否有内存泄漏?
- 20. 是否有PHP
- 21. 内存管理:这段代码是否有内存泄漏?
- 22. Silverlight中是否有内置的内存中LRU缓存?
- 23. 检查共享内存是否存在,以及是否存在共享内存
- 24. PHP是否有固有的内存限制,超出了我设定的范围?
- 25. 是否有必要调用NSManagedObjectContext保存:用于内存存储?
- 26. 是否正在分配多余的内存,是否存在内存泄漏?
- 27. os.walk是否泄漏内存?
- 28. System.Diagnostics.EventLog是否泄漏内存?
- 29. 检查内存是否低
- 30. 是否libpcap自由内存?
只有当你给它一个:http://php.net/manual/en/book.session.php – Mark 2014-10-06 19:01:46