I'm using the PHP code below to access an external HTML file, once accessed there is a foreach loop that searches through the HTML to find a specific string that exists between two other strings.
This search works fine when the two search strings ($start_limiter and $end_limiter) are on the same line in the HTML file. However when they are on separate lines it does not work.
I need to be able to get the string between two search strings regardless of what line they're on.
<?php
function findText($start_limiter,$end_limiter,$url)
{
$start_pos = strpos($url,$start_limiter);
if ($start_pos === FALSE)
{
return FALSE;
}
$end_pos = strpos($url,$end_limiter,$start_pos);
if ($end_pos === FALSE)
{
return FALSE;
}
return substr($url, $start_pos+1, ($end_pos-1)-$start_pos);
}
$url = file("testResults.html");
$start_limiter = "firstString";
$end_limiter = "lastString";
foreach ($url as $number => $line)
{
$res = findText($start_limiter, $end_limiter,trim($line));
if ($res != FALSE)
{
$str2 = substr($res, 9);
echo $str2;
?><br /><?php
}
}
In that case it would be better to analyze the whole string instead of working on partial data (line by line).
Just use file_get_contents()
, instead of file()
(reads line by line into an array), which reads the whole page into a single string and remove the then superfluous foreach loop.
Instead of file()
function you can use file_get_content()
file_get_contents — Reads entire file into a string
file — Reads entire file into an array
<?php
$url = file_get_contents("testResults.html");
function findText($start_limiter,$end_limiter,$url)
{
$start_pos = strpos($url,$start_limiter);
if ($start_pos === FALSE)
{
return FALSE;
}
$end_pos = strpos($url,$end_limiter,$start_pos);
if ($end_pos === FALSE)
{
return FALSE;
}
return substr($url, $start_pos+1, ($end_pos-1)-$start_pos);
}
$start_limiter = "firstString";
$end_limiter = "lastString";
$res = findText($start_limiter, $end_limiter,trim($line));