こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

strposでEmptyのエラーが。引数には何を?

PHPのプログラムを書いているのですが、以下のエラーが出てしまい困っています。

Warning: strpos() [function.strpos]: Empty delimiter in /xxx/hoge.php on line 22

22行目には以下のコードがあります。

if( strpos( $v['email'] , $record ) !== false ){

$record にはこちらです。

$record = trim( fgets( $r_fp , 1024 ) );


調べてみますと、strposの$recordの引数が空?のためのエラーではないかという記事があったのですが、この場合には何を入れればよいのでしょうか?引数に何かを定義しないとだめですか?

ちなみに、これは重複アドレスを弾く記述を行っている一部となります。

何かアドバイスありましたらお願いいたします。
宜しくお願いします!m(_ _)m

投稿日時 - 2014-05-26 15:00:51

QNo.8611472

すぐに回答ほしいです

質問者が選んだベストアンサー

一般的にfeofでのチェックではタイミングが「遅い」です。下記のスクリプトで試してください。

<?php
$r_fp = fopen( "hoge.txt" , "r" );
$ct = 0;
if( $r_fp ){
while( !feof( $r_fp ) ){
$row = fgets( $r_fp , 1024 );
if ($row === false) {
print ++$ct . ':false<br>';
} else {
print ++$ct . ':' . $row . '<br>';
}
}
fclose( $r_fp );
}
print 'End';

hoge.txtの最後の行が「改行なし」でEOFがあればいいですが、そうでなければ false の表示が出てくるハズです。つまり「(前の行を改行まで読んで)次行を読もうとしたら EOF だった」というケースには対応出来ません。

どちらのケースにも対応するには

while ($row = fgets( $r_fp )) {
// $row の処理
}

としてください。

投稿日時 - 2014-05-26 16:22:09

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

>$record = trim( fgets( $r_fp , 1024 ) );

まさか、fgetの戻り値が false の場合にも処理しているなんてことはありませんよね?普通は

while ($row = fgets($r_fp)) {
$record = trim($row);
 :
 :
}

のように書くと思いますが・・・

投稿日時 - 2014-05-26 15:19:57

お礼

有難う御座います!

すみません、少し整理した内容を追記させていただきます。
何が問題なのでしょうか…。

$r_fp = fopen( "hoge.txt" , "r" );
if( $r_fp ){
while( !feof( $r_fp ) ){
$record = trim( fgets( $r_fp , 1024 ) );

if( strpos( $v['email'] , $record ) !== false ){
$max = -1;
break;
}
}
fclose( $r_fp );
}
if( $max == -1 )error_page("<p>".$v['email']."は重複です。</p>" );

投稿日時 - 2014-05-26 15:42:51