草庐IT

PHP:一次只能执行特定脚本的单个实例吗?

coder 2024-04-19 原文

我有一个简单的小脚本,它打印当前时间,休眠十秒钟,然后再次打印当前时间:

<?php
echo "<html><head><title>title</title></head><body>";
echo "<p>Pre-sleep: " . date("H:i:s") . "</p>";
sleep(10);
echo "<p>Post-sleep: " . date("H:i:s") . "</p>";
echo "</body></html>";
?>

我实际上在两个不同的页面中有完全相同的代码(例如“blah1.php”和“blah2.php”)。如果我使用两个不同的浏览器(基本上)同时访问这两个不同的页面,这两个页面似乎(基本上)同时运行:

blah1.php output:

Pre-sleep: 11:15:26

Post-sleep: 11:15:36

blah2.php output:

Pre-sleep: 11:15:27

Post-sleep: 11:15:37

但是如果我改为使用两种不同的浏览器来两者点击 相同 脚本副本,就好像第二个实例在第一个实例完成之前甚至没有开始执行:

blah1.php instance 1 output

Pre-sleep: 11:09:07

Post-sleep: 11:09:17

blah1.php instance 2 output

Pre-sleep: 11:09:17

Post-sleep: 11:09:27

所以看起来 PHP —— 或者至少我的特定 PHP 以当前配置的方式配置 —— 将对任何特定脚本的请求排队,尽管能够同时为单独脚本的请求提供服务?我是不是误会了?

这是预期的吗?这是普遍的事情吗?或者它可能与 sleep() 函数特别相关,或者与实际运行 PHP 脚本的特定服务器(在我的例子中是 Apache)或操作系统或类似的东西有关?

我可以依靠这种行为吗(对特定页面的请求排队并且永远不会同时执行)?另一方面,我可以阻止这种行为吗?

提前致谢。

更新:我现在认为这个问题与 PHP、Apache 或实际上与服务器端的任何事物无关。

我突然意识到,当我说“两个不同的浏览器”时,这实际上是不准确的:我实际上是从 Firefox 的两个不同窗口(在同一台计算机上)发出请求的。因此,我改为尝试使用一个 Firefox 和一个 IE,两者都在服务器端同时运行。

然后我再次尝试使用两个不同的 Firefox 窗口,并观察了一个网络嗅探器。在第一个窗口的响应完成之前,第二个窗口甚至不发送 GET 请求。

所以 Firefox 似乎有这种行为:至少在某些情况下,如果您尝试从 Firefox 向同一个 URL 发出两个请求,Firefox 会将它们排队而不是同时处理它们。

最佳答案

您可以执行任意数量的 PHP 脚本实例。 当您通过浏览器访问您的脚本时,您是通过 Web 服务器访问它的。当您通过 Web 服务器访问脚本时,所发生的只是服务器执行脚本的 1 个实例。

从上面看来,您似乎已将网络服务器设置为对具有上述副作用的传入请求进行排队。

关于PHP:一次只能执行特定脚本的单个实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35183816/

有关PHP:一次只能执行特定脚本的单个实例吗?的更多相关文章

  1. ruby-openid:执行发现时未设置@socket - 2

    我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass

  2. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  3. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  4. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  5. ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量? - 2

    我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击

  6. ruby 正则表达式 - 如何替换字符串中匹配项的第 n 个实例 - 2

    在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg

  7. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  8. ruby - Chef 执行非顺序配方 - 2

    我遵循了教程http://gettingstartedwithchef.com/,第1章。我的运行list是"run_list":["recipe[apt]","recipe[phpap]"]我的phpapRecipe默认Recipeinclude_recipe"apache2"include_recipe"build-essential"include_recipe"openssl"include_recipe"mysql::client"include_recipe"mysql::server"include_recipe"php"include_recipe"php::modul

  9. ruby-on-rails - Rails - 从另一个模型中创建一个模型的实例 - 2

    我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案

  10. ruby - 为什么 Ruby 的 each 迭代器先执行? - 2

    我在用Ruby执行简单任务时遇到了一件奇怪的事情。我只想用每个方法迭代字母表,但迭代在执行中先进行:alfawit=("a".."z")puts"That'sanalphabet:\n\n#{alfawit.each{|litera|putslitera}}"这段代码的结果是:(缩写)abc⋮xyzThat'sanalphabet:a..z知道为什么它会这样工作或者我做错了什么吗?提前致谢。 最佳答案 因为您的each调用被插入到在固定字符串之前执行的字符串文字中。此外,each返回一个Enumerable,实际上您甚至打印它。试试

随机推荐