【问题标题】:Many pages handled by single PHP file vs many PHP files [closed]许多页面由单个 PHP 文件与许多 PHP 文件处理 [关闭]
【发布时间】:2014-01-22 12:12:56
【问题描述】:

我目前正在构建一个我想在未来推出的网站。我已经建立了很多,我认为大约有 40 页。如果您转到另一个链接,该网站目前的工作方式如下:

/index.php

点击会员链接

/members.php

不过,我也可以在我的 index.php 中放置所有逻辑:

/index.php

点击会员链接

/index.php?action=members

然而,我的问题是,当许多页面由单条目 scrypt 提供服务时,这种方法的优势是什么?我会得到什么?是否值得重写我的网站?

【问题讨论】:

  • 允许您将流程代码隐藏在各个页面之外,这意味着您可以在 index.php 中加载整个模板/页眉/页脚等,并且您的子页面仅包含与这些页面相关的代码。如果您希望将来制作漂亮/干净的网址,也可以更轻松。
  • 我明白了,所以当您想查看代码而不需要再次更改模板/页眉/页脚时,它很有用。如果我添加更改样式的选项,是否也可以更轻松地更改网站样式?顺便说一句,为什么每个人都反对我的问题?
  • 是的,如果使用得当,显然就像任何事情一样,它可能会被糟糕地实现,但如果使用得当,可以让你的整个项目更加明智,并且核心是所有框架如何使用它们漂亮的 url 总是有主要的控制者index.php 然后根据请求的漂亮 url 加载包含的方法/视图等

标签: php indexing


【解决方案1】:

我认为您的意思是提供静态内容与动态内容。

如果您使用带有查询字符串的 URL,即http://domain.com/index.php?site=foo,开发人员通常会围绕动态内容构建一个静态框架。这意味着 HTML 页眉、徽标、导航、页脚和其他内容是静态的,他不需要在每个文件中保留这些信息。然后从不同的文件加载内容,这些文件只需要保留内容。

一个负面网站,或者至少很多人这么认为,是您的网址看起来不太好,并且人类和搜索蜘蛛的可读性不太好。将静态 URL 强加于动态 URL 的一种技术是使用 mod_rewrite 和 .htaccess 文件。您可以告诉网络服务器您的 URL 中的某些位置等同于带有查询字符串的 URL。例如http://domain.com/list/ 等价于http://domain.com/index.php?site=list

动态内容很容易像这里一样实现。您可以使用带有查询字符串的 URL 来触发动态内容加载,例如http://domain.com/index.php?site=list.

<!doctype html>
<head>
<!-- html header -->
</head>
<body>
<div id="navigation>
<!-- your navigation -->
</div>
<div id="content">
<?php
switch($_GET['site'])
{
   case "list":
      // serve list content
      include("list.php");
      break;

   default:
      // server default content
      include("home.php");
      break;
}
?>
</div>
<div id="footer">
<!-- your footer -->
</div>
</body>
</html>

switch() 函数确实支持$_GET['site'] 的值,并根据案例的匹配提供内容。

可以在此处找到一个示例 .htaccess 文件,该文件使用不带斜杠的 URL:(您只需要确保 mod_rewrite 对于您的 Apache (a2enmod rewrite @ linux) 或类似的 Web 服务器是活动的。或者您也可以编写将其添加到您的虚拟主机配置文件中。)

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /

   RewriteCond %{REQUEST_URI} (.*)[/\?]$
      RewriteRule ^(.*)[/\?]$ $1 [L,R=301]

   RewriteCond %{REQUEST_URI} !(.*)/$
      RewriteRule ^([^\./]+)/([^\./]+)/([^\./]+)/([^\./]+)$ index.php?section=$1&sub=$2&sub2=$3&sub3=$4 [L]
      RewriteRule ^([^\./]+)/([^\./]+)/([^\./]+)$ index.php?section=$1&sub=$2&sub2=$3 [L]
      RewriteRule ^([^\./]+)/([^\./]+)$ index.php?section=$1&sub=$2 [L]
      RewriteRule ^([^\./]+)$ index.php?section=$1 [L]
</IfModule>

【讨论】:

  • 我明白了,所以优点是不必在每个文件中再次包含页脚、页眉、徽标等?
  • 是的,这是最大的优势
  • 因此,如果您使用 mod_rewrite,您不必重写所有页面,但可以告诉代码像 index.php?site= 那样自动编写它
  • 如果可以的话,我会支持你,但由于某种原因,在我对 Taxicala 说了些什么之后,我的所有问题都被否决了? :S
  • 请注意,在上面的示例中,它非常不安全,但概念是相同的,只是需要重写以不执行盲目信任文件包含
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多