为这个元标记脚本PHP提取STDN


Pulling STDN for This Meta tag Script PHP

我有一个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新手。

首先,要直接解决您的问题,您可以通过$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]);
  // ...