草庐IT

PHP 退出后不加载页面的其余部分;

coder 2024-04-24 原文

我是 PHP 的新手,我不明白为什么会这样。

出于某种原因,当 exit 触发时,整个页面停止加载,而不仅仅是 PHP 脚本。例如,它会加载页面的上半部分,但在包含脚本的下方不会加载任何内容。

这是我的代码:

$page = $_GET["p"] . ".htm";
  if (!$_GET["p"]) {
    echo("<h1>Please click on a page on the left to begin</h1>\n");
    // problem here
    exit;
  }
  if ($_POST["page"]) {
    $handle = fopen("../includes/$page", "w");
    fwrite($handle, $_POST["page"]);
    fclose($handle);
    echo("<p>Page successfully saved.</p>\n");
    // problem here
    exit;
  }  
  if (file_exists("../includes/$page")) {
    $FILE = fopen("../includes/$page", "rt");
    while (!feof($FILE)) {
        $text .= fgets($FILE);
    }
    fclose($FILE);
  } else {
    echo("<h1>Page &quot;$page&quot; does not exist.</h1>\n");
    // echo("<h1>New Page: $page</h1>\n");
    // $text = "<p></p>";
    // problem here
    exit;
  }

最佳答案

即使您的 PHP 代码后面有 HTML 代码,从网络服务器的角度来看,它也只是一个 PHP 脚本。当 exit() 被调用时,它就结束了。 PHP 将输出进程,不再输出 HTML,Web 服务器将不再输出 html。换句话说,它完全按照预期的方式工作。

如果您需要在不阻止输出任何进一步的 HTML 的情况下终止 PHP 代码执行流程,则需要相应地重新组织您的代码。

这是一个建议。如果有问题,设置一个变量来指示。在随后的 if() block 中,检查是否遇到了以前的问题。

$problem_encountered = FALSE;

  if (!$_GET["p"]) {
    echo("<h1>Please click on a page on the left to begin</h1>\n");

    // problem here

    // Set a boolean variable indicating something went wrong
    $problem_encountered = TRUE;
  }

  // In subsequent blocks, check that you haven't had problems so far
  // Adding preg_match() here to validate that the input is only letters & numbers
  // to protect against directory traversal.
  // Never pass user input into file operations, even checking file_exists()
  // without also whitelisting the input.
  if (!$problem_encountered && $_GET["page"] && preg_match('/^[a-z0-9]+$/', $_GET["page"])) {
    $page = $_GET["p"] . ".htm";
    $handle = fopen("../includes/$page", "w");
    fwrite($handle, $_GET["page"]);
    fclose($handle);
    echo("<p>Page successfully saved.</p>\n");

    // problem here
    $problem_encountered = TRUE;
  }  
  if (!$problem_encountered && file_exists("../includes/$page")) {
    $FILE = fopen("../includes/$page", "rt");
    while (!feof($FILE)) {
        $text .= fgets($FILE);
    }
    fclose($FILE);
  } else {
    echo("<h1>Page &quot;$page&quot; does not exist.</h1>\n");
    // echo("<h1>New Page: $page</h1>\n");
    // $text = "<p></p>";
    // problem here
    $problem_encountered = TRUE;
  }

有很多方法可以处理这个问题,其中很多方法都比我提供的示例要好。但这是一种非常简单的方法,可以让您调整现有代码,而无需进行太多重组或冒破坏太多的风险。

关于PHP 退出后不加载页面的其余部分;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7218467/

有关PHP 退出后不加载页面的其余部分;的更多相关文章

  1. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

  2. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  3. ruby-on-rails - 使用 config.threadsafe 时从 lib/加载模块/类的正确方法是什么!选项? - 2

    我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co

  4. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

  5. ruby - 在 ASP 页面上 Mechanize 中断 - 2

    require'mechanize'agent=Mechanize.newlogin=agent.get('http://www.schoolnet.ch/DE/HomeDE.htm')agent.clicklogin.link_withtext:/Login/然后我得到Mechanize::UnsupportedSchemeError。 最佳答案 Mechanize不支持javascript但您可以将搜索字段添加到表单并为其分配搜索词并使用mechanize提交表单form=page.forms.firstform.add_fie

  6. ruby - 在 ruby​​ 中生成一个进程,捕获 stdout,stderr,获取退出状态 - 2

    我想从ruby​​rake脚本运行一个可执行文件,比如foo.exe我希望将foo.exe的STDOUT和STDERR输出直接写入我正在运行rake任务的控制台.当进程完成时,我想将退出代码捕获到一个变量中。我如何实现这一目标?我一直在玩backticks、process.spawn、system但我无法获得我想要的所有行为,只有部分更新:我在Windows上,在标准命令提示符下,而不是cygwin 最佳答案 system获取您想要的STDOUT行为。它还返回true作为零退出代码,这可能很有用。$?填充了有关最后一次system调

  7. ruby-on-rails - prawnto 显示新页面时不会中断的表格 - 2

    我有可变数量的表格和可变数量的行,我想让它们一个接一个地显示,但如果表格不适合当前页面,请将其放在下一页,然后继续。我已将表格放入事务中,以便我可以回滚然后打印它(如果高度适合当前页面),但我如何获得表格高度?我现在有这段代码pdf.transactiondopdf.table@data,:font_size=>12,:border_style=>:grid,:horizontal_padding=>10,:vertical_padding=>3,:border_width=>2,:position=>:left,:row_colors=>["FFFFFF","DDDDDD"]pdf.

  8. ruby - 每个页面上的 Jekyll 分页 - 2

    据我们所知,Jekyll默认分页仅支持index.html,我想创建blog.html并在那里包含分页。有什么解决办法吗? 最佳答案 如果您创建一个名为/blog的目录并在其中放置一个index.html文件,那么您可以向_config.yml表示paginate_path:"blog/page:num"。不是使用根文件夹中的默认index.html作为分页器模板,而是使用/blog/index.html。分页器将根据需要生成类似/blog/page2/和/blog/page3/的页面。这将使您到达yourwebsite.com/b

  9. ruby-on-rails - 使用 gmaps4rails 动态加载谷歌地图标记 - 2

    如何只加载map边界内的标记gmaps4rails?当然,在平移和/或缩放后加载新的。与此直接相关的是,如何获取map的当前边界和缩放级别? 最佳答案 我是这样做的,我只在用户完成平移或缩放后替换标记,如果您需要不同的行为,请使用不同的事件监听器:在你看来(index.html.erb):{"zoom"=>15,"auto_adjust"=>false,"detect_location"=>true,"center_on_user"=>true}},false,true)%>在View的底部添加:functiongmaps4rail

  10. ruby-on-rails - 是否可以让 ActiveRecord 为使用 :joins option? 加载的行创建对象 - 2

    我需要做这样的事情classUser'User',:foreign_key=>'abuser_id'belongs_to:gameendclassGame['JOINabuse_reportsONusers.id=abuse_reports.abuser_id','JOINgamesONgames.id=abuse_reports.game_id'],:group=>'users.id',:select=>'users.*,count(distinctgames.id)ASgame_count,count(abuse_reports.id)asabuse_report_count',:

随机推荐