fopenでファイルを開き、コンテンツ全体を読み取る必要があります。 ファイルには、SSH-SFTP接続を介してアクセスできます:sshでfopenを実行してもファイル全体が取得されない
//ssh connection
$connection = ssh2_connect($host, $port);
//open the file
$handle = fopen("ssh2.sftp://$sftp".$file, "r");
$out = array();
//read the file
while (($fields = fgetcsv($handle, 0, ";")) !== FALSE) {
$out[]=$fields;
}
ファイルが実際にCSVいずれかです。
がここで開かれ、接続してファイルを読むために私のコードです。 fgetcsvを使用して、ファイルを行単位で読み込みます。 しかし、たとえ私のファイルが約20行後に50行と言っても、fgetcsvは失敗し、最終的な配列は不完全です。 ファイルには、私のマシン上で、実際にローカルである:SSH経由開いた場合は、直接ファイルシステムパスで正常に開かれている場合のみ、最初の20行が、読まれています。
fopen("localpath", "r");
whileループは、すべての50行を読み取ります。
ssh接続から読み込むときに、バイト数に制限はありますか?この制限はphp.ini設定オプションで変更できますか?
試しました。しかし何も変わっていない。実際にはファイルの最初の8192バイトしか受信できません。私もssh2_scp_recvを試しました。この場合も元のファイルが15kbyteであっても、scpから取ったファイルは8kbyteです。どこかに8kbyteの限界があるようです。 –
詳細をお知らせください。 OS/PHP版/ Apache版など – rkosegi
私はPHPの5.1でlinux red hat entrprise 6.0を実行します。私は問題を解決することができました。実際、私がアクセスしようとしていたリモートファイルは、私のfopenが動作する前に、舞台裏で作成されています。 「場面の背後にある」コードはfreadを使用してファイルを作成します(別の元のファイルから読み込みます)。 php 5.1 freadでは、このバグhttps://bugs.php.net/bug.php?id=35859&edit=2が表示されます:ファイルを読むときの制限は8kです。あなたの提案をありがとう –