プロが教えるわが家の防犯対策術!

下記ファイルを実行した際、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 );
}
?>

A 回答 (3件)

> 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 …

エラーメッセージで検索をすることが解決の第一歩です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。そもそも、変数$pElementに値を格納していなかったのが、問題だったんですね。それで、undefined valuableエラーと出てしまっていたと。ありがとうございます。おかげさまで無事解決致しました。

お礼日時:2012/02/22 16:35

ん~・・・



>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 )自体無意味ですね
よくよく仕様を見直した方がよいでしょう
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。そもそも、変数$pElementに値を格納していなかったのが、問題だったんですね。それで、undefined valuableエラーと出てしまっていた訳なんですね。ありがとうございます。おかげさまで無事解決致しました。

お礼日時:2012/02/22 16:39

> 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 …

エラーメッセージで検索をすることが解決の第一歩です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!