Mil*_*vić 4 php filesystems flat-file
有办法:
我知道有另一种方法可以将文件的所有内容都放在一个字符串中,但是正如你所知,如果文件的大小很大,那么方法就是时间和内存效率低下.
nic*_*ckb 13
首先,这里有一些基本变量:
$filename = 'small_db.php';
$linenum = 322;
$needle = 'Quick brown fox';
Run Code Online (Sandbox Code Playgroud)
如何计算文件中的行数?
要快速轻松地执行此操作,请count()在打开文件后使用file():
$count = count( file( $filename));
Run Code Online (Sandbox Code Playgroud)
但是,如果文件很大,这将占用大量内存,因为它必须将整个文件加载到内存中以便计算返回值file().另外,您也可以使用标准的文件的功能,fopen(),feof(), fgets(),和fclose(),打开该文件,并逐行读它,保持一个计数,当您去,就像这样:
$count = 0;
$fp = fopen( $filename, 'r');
while( !feof( $fp)) {
fgets( $fp);
$count++;
}
fclose( $fp);
Run Code Online (Sandbox Code Playgroud)如何将文件指针移动到特定行号的开头?
这是使用该SplFileObject课程最好的.您使用要打开的文件的文件名创建此类的新对象,然后使用seek()以查找您选择的行号.然后,您可以使用key()显示行号和current()(或getCurrentLine()或fgets())来获取该行的内容,如下所示:
// Create a new object for the file
$file = new SplFileObject( $filename);
// Seek to to the specific line number
$file->seek( $linenum);
// Print that line:
echo 'Line #' . $file->key() . ' contains: ' . $file->current();
Run Code Online (Sandbox Code Playgroud)如何返回特定针头出现的行号或整行内容?
据我所知,没有内置的PHP函数/方法可以做到这一点.您需要将自己与此类似的功能,它检查文件中的每一行,其文件指针给出一些分析它$fp,对一个特定的区分大小写的$needle使用strpos()(你可以使用stripos()不区分大小写搜索):
function find_in_file( $fp, $needle) {
rewind( $fp); // Or: fseek($fp, 0);
$line_number = 0;
while( !feof( $fp)) {
$line = fgets( $fp);
if( !( strpos( $line, $needle) === false)) {
break;
}
$line_number++;
}
return feof( $fp) ? null : array(
'line_number' => $line_number,
'line' => fgets( $fp)
);
}
Run Code Online (Sandbox Code Playgroud)
您需要像这样调用此函数:
$fp = fopen( $filename, 'r');
$return = find_in_file( $fp, $needle);
if( !is_null( $return)) {
echo 'Found ' . $needle . ' in line #' . $return['line_number'] . "\n";
echo 'That line contains: ' . $return['line'];
}
fclose( $fp);
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
15002 次 |
| 最近记录: |