0

Web ページのメタ タグ情報を取得する 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]、2 番目の引数は$argv[2]などで使用できます。

ここで、スクリプトに関するいくつかの点に対処します。

  • PHP で HTML から情報を抽出する場合、最善の方法はDOMを使用することです。これは PHP に適した HTML パーサーであり<meta>、ドキュメント内のすべてのタグを選択したり、それらの属性の値を非常に簡単に抽出したりすることができます。
  • あなたのコードはドキュメント全体を 2 回ダウンロードしていget_meta_tags()ますfile_get_contents()。これは明らかに非効率的ですが、文書オブジェクトを作成する必要があるのは 1 回だけであるため、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 に答える