答えは、表示されるエラー メッセージにあります。これは、 (オブジェクト指向プログラミングの意味で) オブジェクトではない何かに対して、メソッド、つまりオブジェクトのメンバー関数を呼び出していることを意味します。クラスのオブジェクトではなく、.$in
resource
編集
これで、あなたが達成したいタスクを正しく理解できました。これを試してください:
// use w - to truncate when writing (overwrite), b - in case you ever run this on Windows
$recordFile = fopen('currentposition.txt', 'wbr');
$emailsFile = fopen('emails.txt', 'r');
$pos = trim(fgets($recordFile));
// if first time and there was no 0 in the currentposition.txt
if(!isset($pos))
$pos = 0;
//set the pointer
fseek($emailsFile, $pos);
// read the contents;
$content = fread($emailsFile, filesize($emailsFile));
// get the current position of the file pointer
$pos = ftell($emailsFile);
// write the last position in the file
fwrite($recordFile, $pos);
fclose($recordFile);
fclose($emailsFile);
正直に言うと、それは機能するはずですが、まだテストされていません。一般的な考え方を理解していただければ幸いです。
追加
上記のコードは、電子メール ファイルのすべてのコンテンツを 1 つの (文字列) 変数に一度に読み取ります。\n
次に、区切り記号として使用して分割し$allEmails = split('\n', $content);
、電子メールを配列に入れて、ループすることができます。とにかく、これは同じコードですが、while
ループを使用して、つまり、ファイルを行ごとに読み取ります-非常に大きなファイル(MB)に適しています
// use w - to truncate when writing (overwrite), b - in case you ever run this on Windows
$recordFile = fopen('currentposition.txt', 'wbr');
$emailsFile = fopen('emails.txt', 'r');
$pos = trim(fgets($recordFile));
// if first time and there was no 0 in the currentposition.txt
if(!isset($pos))
$pos = 0;
//set the pointer
fseek($emailsFile, $pos);
// while end of file is not reached
while(!feof($emailsFile)){
// read one line of the file and remove leading and trailing blanks
$kw = trim(fgets($emailsFile));
// .... do something with the line you've read
// get the current position of the file pointer
$pos = ftell($emailsFile);
// you don't need to write the position in the $recordFile every loop!
// saving it in $pos is just enough
}
// write the last position in the file
fwrite($recordFile, $pos);
fclose($recordFile);
fclose($emailsFile);