問題タブ [splfileobject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
3643 参照

php - リンク解除と SplFileObject

SplFileObject からファイルのリンクを解除することは可能ですか?

基になるリソースを閉じるメソッドが表示されず、ファイル ハンドルがプライベートであるため、その目的を念頭に置いて SplFileObject を拡張することはできません。

回避策はありますか?

0 投票する
1 に答える
1569 参照

php - タブ区切りの文字列を PHP で XML に変換

次のように、変数のタブ区切りの内容を XML に書き込もうとしています。

ただし、各タブ間にすべてを書き込むのではなく、XML タグごとに 1 文字だけを書き込みます。SplFileObject を使用して、同じ tsv データをファイルから取得すると、機能します。str_getcsv 関数の何が間違っていますか?

ありがとう

0 投票する
0 に答える
1048 参照

php - SplFileObject に対するアクセス許可が拒否されました

Windows7 64ビットで、xampp(最新バージョン、1.7.7だと思います)でphp 5.3.8を実行しています。ディレクトリ パスを指定して SplFileObject を作成しようとすると、次のメッセージが表示されます (読み取りモードまたは書き込みモードの両方で)。

ストリームを開けませんでした: 権限が拒否されました

フォルダーが存在し、適切な権限を設定しました (Linux ではなく Windows を使用していることを思い出してください)。xampp に問題がある可能性があります。たとえば、Windows では apache プロセスがディスク上のどこにでも書き込むことができませんか?

0 投票する
0 に答える
578 参照

php - SplFileObject の fgets への最初の呼び出しでファイル キーが進められない

次のテキスト ファイルを検討してくださいtest.txt

そして、次の PHP コード:

以下を出力します。

ご覧のとおり、 key は への最初の呼び出しの前後で等しく 0fgets()です。なんで?それは意図されていますか?バグですか?

動作は同じ設定SplFileObject::READ_AHEADフラグです。

私は使用していますPHP 5.3.10-2

ありがとうございました!

編集

SplFileObjectソースコードを見ると、これはバグだと思います。

メソッドkey()は行番号を返すだけです:

lnumインスタンス変数に格納され、ゼロに初期化されます。

新しいインスタンスを作成すると、何も起こらないように見えるlnumため、作成後も値は 0 のままである必要があります。

次に、への呼び出しはfgets、初回を含めて常に1 ずつ増加する必要がlnumありますが、これは起こっていることではありません。

freelineメソッドは、別の変数を NULL に設定しているだけです。

編集 2

PHP チームにバグを報告しました: https://bugs.php.net/bug.php?id=61523

0 投票する
2 に答える
780 参照

php - ファイルPHPから最初のX行を削除します

PHPでこれを行う方法を誰かが知っているかどうか疑問に思っていました。ファイルを開き、最初の1000行を取得し、それらの行でいくつかのことを行うスクリプトを実行しています。次に、phpファイルはそれ自体の別のインスタンスを開いて次の1000行を取得し、ファイルの最後に到達するまで繰り返します. 特定の行をシークできるように splfileobject を使用しています。これにより、これを 1000 行のチャンクに分割することができます。私が抱えている最大の問題は、パフォーマンスにあります。私は10,000,000行以上のファイルを扱っていますが、最初の10,000行ほどは非常に高速ですが、その時点以降は急激な速度低下があり、その時点まで探す必要があると思います.

私がやりたいのは、最初の 1000 行を読み取り、ファイルからそれらを削除して、スクリプトが常に最初の 1000 行を読み取るようにすることです。ファイルの残りの部分をメモリに読み込まずにこれを行う方法はありますか。私が見た他の解決策には、各行を配列に読み取ってから最初の X エントリを取り除くことが含まれますが、1,000 万行ではメモリと時間がかかりすぎます。

誰かがパフォーマンスを高速化する解決策やその他の提案を持っている場合は、大歓迎です。

0 投票する
1 に答える
634 参照

php - PHP ファイル ハンドラーが正しく動作しないのはなぜですか?

「test.txt」ファイルに次のコンテンツがあります: lucas
ファイル内のポインターをシークし、先に情報をオーバーライドしたい。私がすることを仮定:

これにより、 oneasが生成されますが、実行結果はlucasone です。

私はコード ロジックに夢中ですか、それとも動作しませんか?

私がやりたいことをする正しい方法はどうですか?

0 投票する
1 に答える
101 参照

php - PHP の SplFileObject クラスの C++/VC++ 代替

PHP と同じハンド コードクラスSplFileObjectまたは VC++ プラグインはありますか?

質問https://stackoverflow.com/questions/10650864/fetching-nth-line-of-a-file/10650864#10650864を参照してください。C++を使用してこれを実現したい

0 投票する
2 に答える
2393 参照

php - PHP LimitIteratorが失敗します(「シークをサポートしていません」+「ファイルを巻き戻せません」)

とを使用SplFileObjectLimitIteratorて、大きなファイルの位置xからyまでのコンテンツを読み取ります。

これは、のようなファイルパスを使用する場合に完全に機能します/home/devel/stuff/myfile.log

そのようなパスを使用するhttp://mydomain.com:8090/devel/stuff/myfile.logと機能しません。ただし、パスは正しいです。

絶対パスを使用するとこれは失敗しますか?


エラーメッセージは次のとおりです。

PHP Warning: SplFileObject::rewind() [<a href='splfileobject.rewind'>splfileobject.rewind</a>]: stream does not support seeking in ...

PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Cannot rewind file ...'


完全なコード:

0 投票する
1 に答える
229 参照

php - PHP の SplFileObject を使用すると $file->eof() が常に false を返す

PHP スクリプトがハングするのはなぜですか?

最後の行 ( iterator_count(...) を削除して、次のように置き換えます。

$fileObject->eof()常に false を返すため、無限ループが発生します。

なぜこれらのことが起こっているのですか?行数を取得する必要があります。

0 投票する
3 に答える
1749 参照

php - PHPのSplFileObjectを'r'モードで使用すると、$ file-> eof()は常にfalseを返します

PHPスクリプトがハングするのはなぜですか?

最後の行()を削除しiterator_count(...て、これに置き換えた場合:

$fileObject->eof()常にfalseを返すため、無限ループになります。

なぜこれらのことが起こっているのですか?行数を取得する必要があります。