0

我有一个提取网页元标记信息的 php 脚本。我从 CLI 使用这个脚本。我的问题是如何添加到这个接受参数(url)的脚本并将其应用于脚本。同样,这将来自命令行界面。

这是示例脚本。

#!/usr/bin/php
<?php

    function getMetaData($url){
        // get meta tags
        $meta=get_meta_tags($url);
        // store page
        $page=file_get_contents($url);
        // find where the title CONTENT begins
        $titleStart=strpos($page,'<title>')+7;
        // find how long the title is
        $titleLength=strpos($page,'</title>')-$titleStart;
        // extract title from $page
        $meta['title']=substr($page,$titleStart,$titleLength);
        // return array of data
        return $meta;
    }

    // This line should be replaced with the function call using argv    
    //$tags = getMetaData('$url');

    // Check data was passed
    if (empty($argv[1])) {
        exit("You didn't specify a URL!");
    }

    // Pass the supplied data into your code
    $tags = getMetaData($argv[1]);


    echo 'Title: '.$tags['title'];
    echo "\n";
    echo 'Description: '.$tags['description'];
    echo "\n";
    echo 'Keywords: '.$tags['keywords'];

?>

非常感谢您的帮助,我是 php 新手。

4

1 回答 1

1

首先,直接解决您的问题 - 您可以通过$argv全局变量访问脚本的命令行参数。

$argv是在全局范围内注册的标准变量,而不是诸如等之类的超全局变量-因此除非您将其作为参数传递,否则它将在您的函数中不可用。$_GET$_POST

第一个参数将在 中可用$argv[1],第二个参数在 中可用$argv[2],依此类推。

现在解决有关您的脚本的几点问题:

  • 在 PHP 中从 HTML 中提取信息时,最好的方法是使用DOM。这是一个适合 PHP 的 HTML 解析器,它允许您执行诸如选择<meta>文档中的所有标签并非常轻松地提取它们的属性值之类的操作。
  • 您的代码将整个文档下载两次——一次一次,get_meta_tags()一次一次file_get_contents()。这显然是低效的——但可以通过使用 DOM 来解决,因为您只需要创建一次文档对象。或者,您可以file_get_contents()先使用并将数据保存到临时文件,然后调用get_meta_tags()该临时文件。
  • 脚本中的结束?>标记可以(并且通常应该)被省略。这可以防止在脚本末尾意外输出意外的空白。

编辑

以下是如何使用的示例$argv

<?php

  // Check data was passed
  if (empty($argv[1])) {
    exit("You didn't specify a URL!");
  }

  // Pass the supplied data into your code
  $tags = getMetaData($argv[1]);

  // ...
于 2012-08-06T21:32:48.097 回答