下記ファイルを実行した際、Notice: Undefined variable: pElement in C:\xampp\htdocs\scrape_func.php on line 31とエラーが出てしまいます。どこに問題がありますでしょうか?初歩的な質問かと思いますが、よろしくお願い致します。
<?php
/* スパイダリング関数群のインクルード */
include( "scrape_func.php" );
/* getURL関数を使用して、ページの生データを取得する。 */
$_rawData = getURL( "http://www.oreilly.co.jp/catalog/soon.shtml" );
/* 生データをutf-8に変換する。 */
$_rawData = mb_convert_encoding($_rawData, "UTF-8", "auto");
/* 解析しやすいよう、生データを正規化する。 */
$_rawData = cleanString( $_rawData );
/* 次は若干ややこしい。 必要な項目の開始部分と終了部分は、事前にhtmlから確認してある。こういったものを利用して必要なデータを取得する。 */
$_rawData = getBlock( "<font COLOR=\"#80000\">",
"</td></tr>", $_rawData );
/* これで箇条書きに必要な特定データを入手できた。ここでは項目を配列化した後、繰り返しによって、処理を行っている。 */
$_rawData = explode( "<P>", $_rawData );
/* 繰り返しを行いながら、個々の項目を解析する。 */
foreach( $_rawData as $_rawBlock ) {
$_item = array();
$_rawBlock = trim( $_rawBlock );
if( strlen( $_rawBlock ) > 0 ) {
/* 番兵を最後尾に付加する */
$_rawBlock = $_rawBlock . "<P>";
/* 項目のタイトルは<DD class="title"> ... <p>間にある。 */
$_item[ "title" ] = strip_tags( getBlock( "<DD class=\"title\">",
"p", $_rawBlock ) );
/* ISBNは<DT>と<DDの間にある。 */
$_item[ "isbn" ] = getBlock( "<DT>", "<DD>", $_rawBlock, false );
/* スパイダリンした結果を表示する */
print( implode( chr(10), $_item ) . chr(10) . chr(10) );
/* 文字列として保存する (後述するメールの例で使用。) */
$_text .= implode( chr(10), $_item ) .chr(10) . chr(10);
}
}
?>
scrape_func.php
<?php
function getURL( $pURL ) {
$_data = null;
if( $_http = fopen( $pURL, "r" ) ) {
while( !feof( $_http ) ) {
$_data .= fgets( $_http,1024 );
}
fclose( $_http );
}
return( $_data );
}
function cleanString( $pString ) {
$_data = str_replace( array( chr(10), chr(13), chr(9) ), chr(32), $pString );
while( strpos( $_data, str_repeat( chr(32), 2 ), 0 ) != false ) {
$_data = str_replace( str_repeat( chr(32), 2 ),chr(32), $_data );
}
return( trim( $_data ) );
}
function getBlock( $pStart, $pStop, $pSource, $pPrefix = true ) {
$_data = null;
$_start = strpos( strtolower( $pSource ), strtolower( $pStart ), 0 );
$_start = ( $pPrefix == false ) ? $_start + strlen( $pStart ) : $_start;
$_stop = strpos( strtolower( $pSource ), strtolower( $pStop ), $_start );
if($_start > strlen( $pElement ) && $_stop > $_start ){
$_data = trim( substr( $pSource, $_start, $_stop - $_start ));
}
return( $_data );
}
function getElement( $pElement, $pSource ) {
$_data = null;
$pElement = strtolower( $pElement );
$_start = strpos( strtolower( $pSource ), chr(60) . $pElement, 0 );
$_start = strpos( strtolower( $pSource ), "</" . $pElement . chr(62), $_start );
if( $_start > strlen( $pElement ) && $_stop > $_start ) {
$_data = trim( substr( $pSource, $_start, $_stop - $_start ) );
}
return( $_data );
}
?>
No.2ベストアンサー
- 回答日時:
> if($_start > strlen( $pElement ) && $_stop > $_start ){
↓
if(isset($pElement) && $_start > strlen( $pElement ) && $_stop > $_start ){
※Notice: Undefined variable: pElement in C:\xampp\htdocs\scrape_func.php on line 31
「Notice: Undefined variable」
でgoogle検索してみましょう。
http://www.google.co.jp/search?q=Notice%3A+Undef …
エラーメッセージで検索をすることが解決の第一歩です。
ご回答ありがとうございます。そもそも、変数$pElementに値を格納していなかったのが、問題だったんですね。それで、undefined valuableエラーと出てしまっていたと。ありがとうございます。おかげさまで無事解決致しました。
No.3
- 回答日時:
ん~・・・
>function getBlock( $pStart, $pStop, $pSource, $pPrefix = true ) {
>$_data = null;
>$_start = strpos( strtolower( $pSource ), strtolower( $pStart ), 0 );
>$_start = ( $pPrefix == false ) ? $_start + strlen( $pStart ) : $_start;
>$_stop = strpos( strtolower( $pSource ), strtolower( $pStop ), $_start );
>if($_start > strlen( $pElement ) && $_stop > $_start ){
>$_data = trim( substr( $pSource, $_start, $_stop - $_start ));
>}
>return( $_data );
>}
このユーザー関数getBlock()の中で$pElementを利用していますが
関数の外側からも持ってきていないし、なかで宣言もしていないので
$_start > strlen( $pElement )自体無意味ですね
よくよく仕様を見直した方がよいでしょう
ご回答ありがとうございます。そもそも、変数$pElementに値を格納していなかったのが、問題だったんですね。それで、undefined valuableエラーと出てしまっていた訳なんですね。ありがとうございます。おかげさまで無事解決致しました。
No.1
- 回答日時:
> if($_start > strlen( $pElement ) && $_stop > $_start ){
↓
if(isset($pElement) && $_start > strlen( $pElement ) && $_stop > $_start ){
※Notice: Undefined variable: pElement in C:\xampp\htdocs\scrape_func.php on line 31
「Notice: Undefined variable: * in * on line *」(環境によって変わる部分は「*」にする)
でgoogle検索してみましょう。
http://www.google.co.jp/search?q=Notice:+Undefin …
エラーメッセージで検索をすることが解決の第一歩です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- JavaScript プログラムがうまく動きませんレビューお願いします 1 2022/07/10 05:08
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- オープンソース Coinmarketcap api 1 2022/05/30 15:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語でCSVファイルの行数を読...
-
stdClass Objectを連想配列のよ...
-
複数ファイルで、それぞれの行...
-
別ファイルの構造体の値を読み...
-
変数で来た指定日に対して、+3...
-
CSVデータの行数カウントをした...
-
stream_get_contentsの代替関数
-
エラーメッセージ(無効な間接...
-
PHPのfputcsv を使わずにCSVに...
-
自動で番号を振りたい
-
PHPでCSVの一部の行を編集したい
-
マッチング処理(1:N)
-
foreachのなかで次のキーを参照...
-
特定の文からメールアドレスの...
-
ファイルの逆読みってできますか?
-
プログラミングのPythonのnoteb...
-
スカラーのベクトル微分
-
CArrayの要素としてCStringArra...
-
PHPで変数名にハイフンを使うに...
-
配列を回すとき、最後の要素だ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数行のデータのPOST処理に関して
-
Resource id #3 と表示されま...
-
別ファイルの構造体の値を読み...
-
バイナリファイルの内容を、そ...
-
PHPでCSVの一部の行を編集したい
-
CSVファイルの最終行のデー...
-
ヒアドキュメントの中のfor文
-
stdClass Objectを連想配列のよ...
-
◆速い、ファイル読み込みは?
-
C言語でCSVファイルの行数を読...
-
phpでCSVファイルの中身を多次...
-
rubyで複数列のデータを一行に...
-
多次元配列の一次元目の最大値...
-
行数が30万件ほどあるCSVから、...
-
配列同士の足し算のループ処理
-
FortranのOPEN文
-
自動で番号を振りたい
-
csvの内容を行単位で削除したい
-
CSVデータの行数カウントをした...
-
While文を使って配列の中身を全...
おすすめ情報