我在我的网站上写了一个php搜索脚本,用于检查文件是否存在于文本文件中(我使用file_get_contents
。)它取用户输入的内容并将其与字符串'BUILD结合起来:'下面是该文件的一个示例,我将在其后的段落中解释:
BUILD: packageA
URL: www.package-a.com
BUILD: packageB
URL: www.package-b.com
BUILD: packageC
URL: www.package-c.com
因此,如果用户要搜索“packageB”,它将与“BUILD:”组合使得我正在测试的变量具有值:“BUILD:packageB”。如果该字符串存在与否,我有条件说法;一切都在这方面做得很好。
我的问题/问题是我如何列出URL:它下面的一行带有回声?我一直用strlen()
测试一些想法,我似乎无法得到它,文本文件有不同的strlens进入。如果有这样的事情,有没有办法让PHP强制"nextLine()"
... PHP是否识别返回分隔符?
谢谢!
答案 0 :(得分:2)
// The string you are searching for
$package = 'packageB';
// Get the file into an array
$data = file('myfile.txt');
// Loop the data
for ($i = 0, $found = FALSE; isset($data[$i]); $i++) {
if (trim($data[$i]) == "BUILD: $package") { // We found the one we're looking for
echo trim($data[++$i]); // Echo the next line
$found = TRUE;
break; // Stop looping
}
}
if ($found) {
echo "<br />\nI found the URL on line $i";
} else {
echo "I didn't find it!";
}
file()
将文件数据作为一个数组获取,其中每个元素都是文件的一行,而不像file_get_contents()
这样的单个字符串返回。
答案 1 :(得分:1)
您可以使用/ m修饰符执行正则表达式,使其匹配多行,然后使用带括号的模式捕获匹配后的行:
if (preg_match_all('/BUILD: packageB\n(.+)\n/m', file_get_contents('file.txt'), $match)) {
foreach ($match[1] as $match) {
echo "$match\n";
}
}
输出:
URL: www.package-b.com
答案 2 :(得分:0)
如果您对替代方法持开放态度,那么这是一个更简单/更快的解决方案。
<强> builds.php 强>
<?php
$builds=array("packageA"=>"www.package-a.com",
"packageB"=>"www.package-b.com",
"packageC"=>"www.package-c.com",
"packageD"=>"www.package-d.com");
?>
<强> OtherScript.php 强>
<?php
if(isset($_POST['package'])){
include('./builds.php');
if(array_key_exists($_POST['package'], $builds)){
$notice="You Selected: ".$_POST['package']." Url:".$builds[$_POST['package']];
}else{
$notice="Package Not Found";
}
}
echo (isset($_POST['package']))?$notice:'';
?>