
url.txtに
http://test1.com
http://test2.com
http://test3.com
:
とあります。このURLのhtmlファイルから<title>サイト名</title>部分を抜き出し、
http://test1.com+サイト名1
http://test2.com+サイト名2
http://test3.com+サイト名3
:
と表示したいです。
<?php
/**
* ページタイトルを取得する関数
*/
function getPageTitle( $url ) {
$html = file_get_contents($url); //(1)
$html = mb_convert_encoding($html, mb_internal_encoding(), "auto" ); //(2)
if ( preg_match( "/<title>(.*?)<\/title>/i", $html, $matches) ) { //(3)
return $matches[1];
} else {
return false;
}
}
$filename="url.txt";
$data=file_get_contents($filename);
$array = split("\n",$data);
foreach($array as $values){
echo $array."+".getPageTitle($array);
}
?>
ですがこのコードだと7行目あたりでエラーが出てしまいます。
どなたか解決策をご教示ください。どうかよろしくお願いします。
No.3ベストアンサー
- 回答日時:
警告が2種類出ています。
> Warning: mb_detect_encoding() expects at least 1 parameter, 0 given
mb_detect_encoding() は最低でも1つはパラメータが必要だけど、
ひとつも与えられてないよ、と警告されています。
$html = mb_convert_encoding($html, mb_internal_encoding(), "auto" ); //(2)
ここで、mb_detect_encoding() を mb_internal_encoding() に戻してみると
どうでしょうか。
> Warning: file_get_contents(http://blog.livedoor.jp/dqnplus/ ) [function.file-get-contents]:
> failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in
こちらは、URLの末尾に \r が付いているのではないかと思います。
foreach($array as $values){
$url = trim($values);
echo $values."+".getPageTitle($values);
echo "\n";
}
$url = trim($values); で、$values を trim にかけた結果が $url に入っていますが、
$url が使われていません。
$values ではなく $url を getPageTitle に渡してください。
foreach($array as $values){
$url = trim($values);
echo $url."+".getPageTitle($url);
echo "\n";
}
あるいは、$values がよければ、
trim の結果を $values に代入してください。
foreach($array as $values){
$values = trim($values);
echo $values."+".getPageTitle($values);
echo "\n";
}
http://php.net/manual/ja/function.trim.php
ご回答ありがとうございます。
教えていただいたところを訂正し、関数の文字化けを参考にしながら直したらここまでできました。
<?php
/**
* ページタイトルを取得する関数
*/
function getPageTitle($url){
$html = file_get_contents($url);
$enc_format = "JIS, eucjp-win, sjis-win, UTF-8";
$enc_html = mb_convert_encoding($html, "UTF-8", $enc_format);
if(preg_match( "/<title>(.*?)<\/title>/is", $enc_html, $matches)){
return $matches[1];
} else {
return false;
}
}
$filename="url.txt";
$data=file_get_contents($filename);
$array = split("\n",$data);
foreach($array as $values){
$url = trim($values);
echo $url."+".getPageTitle($url);
echo "\n";
}
?>
---
http://wired.jp/+ WIRED.jp 世界最強の「テクノ」ジャーナリズム http://workingnews.blog117.fc2.com/+ http://blog.livedoor.jp/dqnplus/+痛いニュース(ノ∀`) - ライブドアブログ http://yahoo.com/+Yahoo!
---
echo "\n";を指定しているにもかかわらず各行が改行されないのと、fc2.comのtitleが取得されないのは何故なのでしょうか。
よろしくお願いします。
No.2
- 回答日時:
エラーメッセージは次のようなものではないでしょうか?
PHP Warning: file_get_contents() expects parameter 1 to be string, array given
in ファイル名 on line 行番号
foreach のループ内で getPageTitle に $array を渡しています。
foreach($array as $values){
echo $array."+".getPageTitle($array);
}
この foreach ループでは、配列 $array から要素が次々取り出されて $values に入りますので、
質問者さんがやりたいことは下記のようになるかと思います。
foreach($array as $values){
echo $values."+".getPageTitle($values);
}
http://php.net/manual/ja/control-structures.fore …
おまけ:
url.txt の改行コードが CRLF (\r\n) の場合、
\r が残って動作がおかしくなるかもしれません。
その場合は trim 関数等で取り除くとよいと思います。
foreach($array as $values){
$url = trim($values);
echo $url."+".getPageTitle($url);
}
ありがとうございます。
【gettitle.php】
---
<?php
/**
* ページタイトルを取得する関数
*/
function getPageTitle( $url ) {
$html = file_get_contents($url); //(1)
$html = mb_convert_encoding($html, mb_detect_encoding(), "auto" ); //(2)
if ( preg_match( "/<title>(.*?)<\/title>/i", $html, $matches) ) { //(3)
return $matches[1];
} else {
return false;
}
}
$filename="url.txt";
$data=file_get_contents($filename);
$array = split("\n",$data);
foreach($array as $values){
$url = trim($values);
echo $values."+".getPageTitle($values);
echo "\n";
}
?>
---
【url.txt】
---
http://wired.jp/
http://workingnews.blog117.fc2.com/
http://blog.livedoor.jp/dqnplus/
http://yahoo.com/
---
これで実行してみましたが、
Warning: mb_detect_encoding() expects at least 1 parameter, 0 given in C:\xampplite\htdocs\geturltitle.php on line 7
http://wired.jp/ +HELLO, WORLD « WIRED.jp ?????????????????
Warning: mb_detect_encoding() expects at least 1 parameter, 0 given in C:\xampplite\htdocs\geturltitle.php on line 7
http://workingnews.blog117.fc2.com/ +404 Error - FC2???
Warning: file_get_contents(http://blog.livedoor.jp/dqnplus/ ) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\xampplite\htdocs\geturltitle.php on line 6
Warning: mb_detect_encoding() expects at least 1 parameter, 0 given in C:\xampplite\htdocs\geturltitle.php on line 7
http://blog.livedoor.jp/dqnplus/ +
Warning: mb_detect_encoding() expects at least 1 parameter, 0 given in C:\xampplite\htdocs\geturltitle.php on line 7
http://yahoo.com/+Yahoo!
というエラーが出てきます。
このエラーの解決方法を教えてください。
どうかよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP php ログイン 1 2022/11/01 00:24
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2次元配列の値の受け渡しについ...
-
別ファイルの構造体の値を読み...
-
stdClass Objectを連想配列のよ...
-
PHPのループ数限界値について
-
foreachのなかで次のキーを参照...
-
C言語の配列をPush(追加)する...
-
Texでの数式
-
行列
-
配列一致(要素順番は違うが内容...
-
file_existsでファイル名の部分...
-
自動で番号を振りたい
-
配列の添え字が小数だとどうなる?
-
CArrayの要素としてCStringArra...
-
$_SESSIONに二次元配列を使える...
-
PHP SimpleXml unsetについて
-
C言語 最大値と最小値を求めて...
-
2次元配列のソート
-
配列の値の更新方法について
-
Smartyを使って、テーブルを表示
-
ヒアドキュメントの中のfor文
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウンメニューにDBの内容...
-
POSTで受け取った値をもとにJpG...
-
cakephp2.6でfindを使い合計値...
-
しりとり 無限ループ?
-
PHPの配列の初期化について
-
日付、時間の2段階でソート
-
多次元配列のカウント+1の仕方
-
phpとmysqlで「あいまい検索」...
-
順位を付ける時のスコアの重複...
-
PHP5の外部コマンド実行で、バ...
-
再帰的な順列書き出し
-
サイト名を取得するPHP
-
listへのappendが出来ない件
-
順位をつけたいです。
-
2次元配列の値の受け渡しについ...
-
$a[0]='w';$a[1]='r';を1回で
-
PHP配列をJavaScriptに渡したい
-
mysqlにinsertするとエラーがで...
-
$xml要素を階層指定して取得し...
-
バッチでFTPコマンド
おすすめ情報