【问题标题】:PHP include external file and make an ArrayPHP包含外部文件并创建一个数组
【发布时间】:2011-11-24 14:51:43
【问题描述】:

我想包含一个外部文件,然后获取所有内容,删除页面上唯一的 HTML <br /> 并替换为 , 并将其触发到数组中。

datafeed.php

john_23<br />
john_5<br />
john_23<br />
john_5<br />

grabber.php

<?php
// grab the url
include("http://site.com/datafeed.php");

//$lines = file('http://site.com/datafeed.php);

// loop through array, show HTML source as HTML source.
foreach ($lines as $line_num => $line) {

    // replace the <br /> with a ,
    $removeBreak = str_replace("<br />",",", $removeBreak);
    $removeBreak = htmlspecialchars($line);
    // echo $removeBreak;
}

// fill our array into string called SaleList
$SaleList = ->array("");

我想从服务器目录加载一个 php 文件,获取该文件的 HTML 内容并将其放入一个可用的数组中。

看起来像

$SaleList = -getAndCreateArray from the file above >array("");
$SaleList = ->array("john_23, john_5, john_23");

【问题讨论】:

  • include() 在远程 URL 上是危险的。您将完全控制您的脚本的外部服务器,因此完全控制您的网站。除此之外……还有问题吗?你没有提到有问题,所以如果这段代码工作正常,那为什么要发布呢?
  • include 是你知道的唯一一个文件操作符吗? file()、file_get_contents() 呢?
  • @MarcB 这个代码不起作用。
  • @Marc B:粗略查看一下他发布的代码表明它运行不正常。他的问题可以概括为“我的代码不起作用。我怎样才能改变它以使其工作?”
  • @Asaph:是的,也许 OP 实际上应该说出问题所在。我可以看到他在使用 $removeBreak 却没有定义它,但不知道 OP 实际希望这段代码做什么,这可能只是一些死代码。

标签: php arrays include


【解决方案1】:

这是grabber.php的工作版本:

<?php
function getSaleList($file) {
    $saleList = array();
    $handle = fopen($file, 'r');
    if (!$handle) {
        throw new RuntimeException('Unable to open ' . $file);
    }
    while (($line = fgets($handle)) !== false) {
        $matches = array();
        if (preg_match('/^(.*?)(\s*\<br\s*\/?\>\s*)?$/i', $line, $matches)) {
            $line = $matches[1];
        }
        array_push($saleList, htmlspecialchars($line));
    }
    if (!feof($handle)) {
        throw new RuntimeException('unexpected fgets() fail on file ' . $file);
    }
    fclose($handle);
    return $saleList;
}

$saleList = getSaleList('datafeed.php');

print_r($saleList);
?>

通过使用正则表达式查找&lt;br /&gt;,代码可以处理&lt;br&gt;&lt;BR&gt;&lt;BR /&gt;&lt;br/&gt;等多种变体。

输出是:

Array
(
    [0] => john_23
    [1] => john_5
    [2] => john_23
    [3] => john_5
)

【讨论】:

  • if($function=="query" && in_array($someID, $saleList)){ // }
  • 我讨厌那种输出。我只想要上面显示的输出。
  • 我想做上面的 if 语句。
  • 如果您不喜欢该输出,只需删除print_r($saleList); 行,该行仅用于证明代码完成了它应该做的事情。 $saleList 变量已包含您要查找的数组。
  • 输出并不重要。关键是您的文件已被解析并且您的数组已被创建。你有你需要的东西吗?
【解决方案2】:

您似乎没有掌握 include 的作用。

如果您想使用 PHP 代码处理某些文件的内容,那么 include 是错误的构造 - 您应该使用 file() 或 file_get_contents()。

即使用您在问题中注释掉的代码行。

include 是正确使用的构造......你永远不应该直接包含远程文件 - 它比本地文件系统读取慢得多 MUCH - 而且非常不安全。有时从远程位置获取文件并在本地缓存它确实有意义。

并且您永远不应该在包含文件中包含内联 HTML 或 PHP 代码(PHP 变量/条件表达式中的 html,并且 PHP 定义/类/函数/include/require 都可以)。

【讨论】:

    【解决方案3】:

    你需要这样的东西吗?

    $file = file_get_contents('newfile.php');
    echo str_replace("<br>", ",", $file);
    

    但我没有得到您尝试插入数组的内容...

    【讨论】:

    • 这段代码工作正常,但是它打印所有的 PHP,它不做 HTML。
    • @TheBlackBenzKid 获取将返回 HTML 的外部文件。
    • 但是如何将它抓取到一个数组中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 2012-09-26
    • 2013-08-08
    • 2012-06-14
    相关资源
    最近更新 更多