我有一个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]);
// ...