Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 读取文本文件并显示部分行_Php_Arrays_String_Search - Fatal编程技术网

Php 读取文本文件并显示部分行

Php 读取文本文件并显示部分行,php,arrays,string,search,Php,Arrays,String,Search,我正在创建一个点击计数器。 注册访问者所在的脚本会创建一个.txt文件,如下所示 IP Adress:127.0.0.1 Timestamp:1400602795 User Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 Times visited:1 我希望能够获得时间戳和访问次数等信息。 我想这

我正在创建一个点击计数器。 注册访问者所在的脚本会创建一个.txt文件,如下所示

 IP Adress:127.0.0.1

 Timestamp:1400602795

 User Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36

 Times visited:1
我希望能够获得时间戳和访问次数等信息。 我想这样做的一种方法是创建一个由“:”分隔的数组

我试图创建数组,但由于某些原因,“访问次数”没有包含在数组中。以下是该尝试的代码:

$fileResource = @fopen("hits/".$_SERVER["REMOTE_ADDR"].".txt","r");
$fileContent = @fread($fileResource,100000);

$array = preg_match_all("/(.*):(.*)\\n/i",$fileContent,$fileMatches);
//0 = IP
//1 = Timestamp
//2 = User Agent
//3 = Times Visited
echo $fileMatches[0][3];
这是我尝试打印时的输出($fileMatches)

( [0]=>阵列 ( [0]=>IP地址:127.0.0.1

        [1] => Timestamp:1400604101

        [2] => User Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36

    )

[1] => Array
    (
        [0] => IP Adress
        [1] => Timestamp
        [2] => User Agent
    )

[2] => Array
    (
        [0] => 127.0.0.1
        [1] => 1400604101
        [2] => Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36
    )

)

如果已将文件的全部内容读入字符串,则可以使用以下两种方法:

$s = <<<EOT
IP Address:127.0.0.1

Timestamp:1400602795

User Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36

Times visited:1
EOT;

$arr = array();
foreach (explode("\n", $s) as $line) {    
    if (trim($line) !== '') { // check for empty line
        list($key, $value) = explode(':', $line);   
        $arr[$key] = trim($value);
    }
}
print_r($arr);
Array ( 
    [IP Address] => 127.0.0.1 
    [Timestamp] => 1400602795 
    [User Agent] => Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 
    [Times visited] => 1 
) 

或者,您可以使用
fgets
逐个读取每一行,而不是使用
fread
,并将
foreach
循环替换为类似
while(fgets($fileResource))

请展示您尝试过的一些方法。
preg\u match\u all
就是这样做的方法。只是别忘了为regexp添加多行开关。类似的方法应该有效。
([^:.+]):([^:.+]))\n | s
。不确定是否懒惰,还必须检查应停止regexp匹配的新行。循环每行,首先查找
(使用
strpos()
),获取前后的所有内容(使用
substr()
)并创建数组。(使用
trim()
去除空白。)我已经编辑了这篇文章并添加了更多的信息。这只是一个简单的问题,@robin00212是什么意思?我用a编写了示例输入。这只是一种编写多行字符串的方法。
EOT
可以是任何其他标记,如

Array ( 
    [IP Address] => 127.0.0.1 
    [Timestamp] => 1400602795 
    [User Agent] => Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 
    [Times visited] => 1 
)