0

数値を含むファイルをロードし、それを(文字列ではなく)数値として使用したい。これに対する解決策はありますか?私が得るエラー

Call to a member function seek() on a non-object 

私のPHPコード

$in = fopen('emails.txt','r');
$out = fopen('currentposition.txt', 'r+');
$pos = file_get_contents('currentposition.txt');
$in->seek($number1); 
while($kw = trim(fgets($in))) {
    //my code
    $position = $in->current();
    fwrite($out, $position);
}

fclose($in);
fclose($out);
4

3 に答える 3

1

ファイル

$ cat /tmp/ll
9

スクリプト :

<?php

$x = file_get_contents("/tmp/ll");
echo $x + 10;
?>

出力:19

于 2012-05-29T16:36:44.793 に答える
0

$pos...の代わりに使用し$number1ますか?

于 2012-05-29T16:38:23.613 に答える
0

答えは、表示されるエラー メッセージにあります。これは、 (オブジェクト指向プログラミングの意味で) オブジェクトではない何かに対して、メソッド、つまりオブジェクトのメンバー関数を呼び出していることを意味します。クラスのオブジェクトではなく、.$inresource

編集

これで、あなたが達成したいタスクを正しく理解できました。これを試してください:

// 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);
于 2012-05-29T16:52:15.603 に答える