【问题标题】:glob - scan folder for php news article filesglob - 扫描 php 新闻文章文件的文件夹
【发布时间】:2013-06-28 00:58:14
【问题描述】:

我有一个新闻概览页面,以及一个我想单独包含的 php 文件文件夹。 与其手动将每一个都包含在我的概览页面中,我想我会使用 php 来扫描文件夹中的 php 文件,并将它们作为包含语句打印出来。

我有以下代码:

<?php $articles = glob("/assets/news/form/*.php"); ?>
<?php
if(count($articles)) {
  natcasesort($articles);
  foreach($articles as $article) {
  ?>
      <?php include("$_SERVER[DOCUMENT_ROOT]/assets/news/overview/$article"); ?>

<?php
    }} else {
      echo "Sorry, no articles to display!";
    }
?>

我没有得到任何语法,但我没有收到任何输出。文章应该在的地方只是一个空白区域。

我想要的输出是这样的:

<?php include("$_SERVER[DOCUMENT_ROOT]/assets/news/overview/1.php"); ?>
<?php include("$_SERVER[DOCUMENT_ROOT]/assets/news/overview/2.php"); ?>
<?php include("$_SERVER[DOCUMENT_ROOT]/assets/news/overview/3.php"); ?>
<?php include("$_SERVER[DOCUMENT_ROOT]/assets/news/overview/4.php"); ?>
<?php include("$_SERVER[DOCUMENT_ROOT]/assets/news/overview/5.php"); ?>
<?php include("$_SERVER[DOCUMENT_ROOT]/assets/news/overview/6.php"); ?>

最终我想写一个 php 函数来扫描ROOT/assets/news/form/ 中的文件夹 对于所有php文件,并包含文件夹ROOT/assets/news/overview中的所有同名文件。

我的新闻概览页面目前在/news/index.php

谁能帮我解决这个问题?

【问题讨论】:

  • "我想我会使用 php 来扫描文件夹中的 php 文件,并将它们作为包含语句打印出来" - 这很好,直到你在你的目录中得到一个不需要的 PHP 文件,然后你会自动包含它。我会坚持使用手动包含,或者至少将它们限制在你知道好的那些。
  • echo file_get_contents($file);
  • 您是否考虑过使用数据库,如果这些“新闻”文件只是文本\html
  • 这是一个临时解决方案,一个 db 付出的努力远远超过它的价值!我正在寻找一个简单的 php 解决方案...
  • glob() 返回完整路径名,而不仅仅是文件名。所以$article 类似于/assets/news/form/1.php,而您正在尝试包含$_SERVER[DOCUMENT_ROOT]/assets/news/overview//assets/news/form/1.php

标签: php include glob scandir


【解决方案1】:

在这里,试一试:(已测试)

使用absolute 路径在我的服务器上测试。

<?php

// path to .php files must be absolute path
// example: /server/user/f/fred/forms/*.php
// May have to modify your path if it's not absolute

// You may have to use this, if doesn't work
// $articles = glob("$_SERVER[DOCUMENT_ROOT]/assets/news/forms/*.php");
$articles = glob("/assets/news/forms/*.php");

if(count($articles)) {
  natcasesort($articles);
  // rsort($articles); // use rsort for descending order

foreach($articles as $article) {
    $article = basename($article);

// You may have to use this, if doesn't work
// include("$_SERVER[DOCUMENT_ROOT]/assets/news/forms/$article");
include("$_SERVER[DOCUMENT_ROOT]/assets/news/forms/$article");

      }

    }

else {

echo "Sorry, no articles.";

}

?>

【讨论】:

  • 因此我目前收到以下错误:警告:natcasesort() 期望参数 1 是数组,布尔值在 httpROOT/news/index.php 第 113 行中给出警告:为 foreach 提供的参数无效( ) 在 httpROOT/news/index.php 第 115 行
  • @LukeCottingham 这很奇怪。它对我有用。让我仔细检查一下,但我很确定那是我使用的确切语法。给我一分钟。
  • @LukeCottingham 嗯,这是最离奇的事情。在测试我发布的内容后,它运行良好。现在,突然间,它向我展示了多个副本。老实说,我不知道突然发生了什么。我会尝试重做它,然后告诉你。
  • @LukeCottingham 实际上,请刮开我的最后一条评论(在这条评论之上)。有效。这可能是您在glob("/assets/news/form/*.php"); 中设置path 的方式 - 还要确保您的脚本与您的文章不在同一个文件夹中,并且其中只有文章文件。
  • hmmm ...好吧,如果我在本地主机上运行,​​我只会得到回声,而在服务器外,我会得到语法。真的很诡异。我假设语法告诉我它正在寻找没有文件..所以它在错误的地方寻找。虽然,如果我回显 $articles 以查看它显示的内容,它不会显示任何内容?我是不是做错了什么
【解决方案2】:

变化:

foreach($articles as $article) {

到:

foreach($articles as $article) {
    $article = basename($article);

去除glob()结果中的目录前缀。

【讨论】:

    猜你喜欢
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 2016-08-23
    • 2012-03-16
    相关资源
    最近更新 更多