Php 获取特定行号下的文本内容

Php 获取特定行号下的文本内容,php,Php,我在这里使用PHP 我想提取特定行号下的文本。之所以要这样做,是为了从CURL响应中删除HTTP头信息 下面是来自示例响应数据的一些代码: HTTP/1.1 203 OK Date: Tue, 23 Aug 2011 20:56:41 GMT Server: Apache/2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4 Perl/v5.10.1 X-Powered-By: PHP/5.3.5 Set-

我在这里使用PHP

我想提取特定行号下的文本。之所以要这样做,是为了从CURL响应中删除HTTP头信息

下面是来自示例响应数据的一些代码:

HTTP/1.1 203 OK
Date: Tue, 23 Aug 2011 20:56:41 GMT
Server: Apache/2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4   Perl/v5.10.1
X-Powered-By: PHP/5.3.5
Set-Cookie: PHPSESSID=ke0uv5bm0mqjn3i3jad6n20co4; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Test-Header: This is my test header
Content-Length: 24
Content-Type: text/html

This is the get response
我想做的是删除所有标题信息,只返回我的内容,即“这是我的get响应”

我已经用正则表达式成功地做到了这一点,但我想做一些简单的事情来清除主响应上方的内容,而不是匹配标题内容,然后替换为空白

有什么想法吗


谢谢。

您不需要标题吗?告诉cURL不要给你标题:

$ch1 = curl_init();

// set URL and other appropriate options
curl_setopt($ch1, CURLOPT_URL, "http://www.example.com");
curl_setopt($ch1, CURLOPT_HEADER, 0);

你不想要标题?告诉cURL不要给你标题:

$ch1 = curl_init();

// set URL and other appropriate options
curl_setopt($ch1, CURLOPT_URL, "http://www.example.com");
curl_setopt($ch1, CURLOPT_HEADER, 0);
我会使用
file()
。例如,您可以这样做:

$URL = 'www.whatever.com';

$URL = file($URL);

$count = count($URL);

$line_number = 15; // for example

for($I=$line_number; $I<=$count; $I++){
  echo $URL[$I];
}
$URL='www.whatever.com';
$URL=文件($URL);
$count=count($URL);
$line_编号=15;//例如
对于($I=$line\u number;$I我将使用
file()
。例如,您可以这样做:

$URL = 'www.whatever.com';

$URL = file($URL);

$count = count($URL);

$line_number = 15; // for example

for($I=$line_number; $I<=$count; $I++){
  echo $URL[$I];
}
$URL='www.whatever.com';
$URL=文件($URL);
$count=count($URL);
$line_number=15;//例如

对于($I=$line_number;$I而言,如果您仍然需要标头,则可以从cURL中分别获取标头

$url = 'http://www.example.com';
print_r(get_headers($url)); //returns headers array
然后用手卷曲

$ch1 = curl_init();

// set URL and other appropriate options
curl_setopt($ch1, CURLOPT_URL, $url);
curl_setopt($ch1, CURLOPT_HEADER, 0);
如上所述


(可能不是很快,也可能不适用于重新定向)

如果您仍然需要标头,可以从卷曲中分别获取标头

$url = 'http://www.example.com';
print_r(get_headers($url)); //returns headers array
然后用手卷曲

$ch1 = curl_init();

// set URL and other appropriate options
curl_setopt($ch1, CURLOPT_URL, $url);
curl_setopt($ch1, CURLOPT_HEADER, 0);
如上所述


(可能不是很快,也可能不适用于重新定向)

我做了一些探索,下面是我提出的解决方案

为了获得标题内容占用的行号数量,我编写了以下代码:

$pattern_1_str = '/(http\/\d\.\d)\s+([\d]+)\s+([\w\-\/\'\"\(\)\\\. ]+)/i';
$pattern_2_str = '/([\w\-]+)\:\s+(.+)/i';

$matches_1_arr = array();
$matches_2_arr = array();

preg_match_all($pattern_1_str, $curl_response_res, $matches_1_arr);
preg_match_all($pattern_2_str, $curl_response_res, $matches_2_arr);

$line_count_1_str = count($matches_1_arr[0]);
$line_count_2_str = count($matches_2_arr[0]);

$line_num_offset_str = bcadd(1, bcadd($line_count_1_str, $line_count_2_str, 0), 0);
然后,为了仅获取内容,以下代码将执行此操作:

$val_str_arr = array();
$val_str_arr = explode("\n", trim($curl_response_res));

$line_num_int = intval($line_num_offset_str);

$val_str_slice_arr = array();
$val_str_slice_arr = array_slice($val_str_arr, $line_num_int);

$curl_response_content_only_str = implode("\n", $val_str_slice_arr);
其中,
$curl\u response\u res
是我在上面的问题中提到的响应数据

我不确定这段代码的效率有多高,但对于来自CURL的简单且相对较短的响应数据,它看起来可以


感谢您的回复。

我做了一些探索,以下是我提出的解决方案

为了获得标题内容占用的行号数量,我编写了以下代码:

$pattern_1_str = '/(http\/\d\.\d)\s+([\d]+)\s+([\w\-\/\'\"\(\)\\\. ]+)/i';
$pattern_2_str = '/([\w\-]+)\:\s+(.+)/i';

$matches_1_arr = array();
$matches_2_arr = array();

preg_match_all($pattern_1_str, $curl_response_res, $matches_1_arr);
preg_match_all($pattern_2_str, $curl_response_res, $matches_2_arr);

$line_count_1_str = count($matches_1_arr[0]);
$line_count_2_str = count($matches_2_arr[0]);

$line_num_offset_str = bcadd(1, bcadd($line_count_1_str, $line_count_2_str, 0), 0);
然后,为了仅获取内容,以下代码将执行此操作:

$val_str_arr = array();
$val_str_arr = explode("\n", trim($curl_response_res));

$line_num_int = intval($line_num_offset_str);

$val_str_slice_arr = array();
$val_str_slice_arr = array_slice($val_str_arr, $line_num_int);

$curl_response_content_only_str = implode("\n", $val_str_slice_arr);
其中,
$curl\u response\u res
是我在上面的问题中提到的响应数据

我不确定这段代码的效率有多高,但对于来自CURL的简单且相对较短的响应数据,它看起来可以


感谢您的回复。

将CURLOPT_HEADER设置为false,您是从PHP中使用cURL,还是将响应保存在需要使用PHP处理的单独文件中?@Ilya:谢谢,我知道将CURLOPT_HEADER设置为false。但是,我的脚本也需要HTTP头,我只需要将头与主要内容分开@Richard:我在PHP中使用CURL。我需要标题,我只想分离标题信息。可能重复将CURLOPT_标题设置为false,您是在PHP中使用CURL,还是需要使用PHP处理单独文件中的响应?@Ilya:谢谢,我知道将CURLOPT_标题设置为false。但是,我不知道为我的脚本添加了HTTP头,我只需要将头与主要内容分开。@Richard:我在PHP中使用CURL。我需要头,我只想分开头信息。可能与See重复-这建议您在使用'CURLOPT_header'@NullUser时,应传递一个布尔值作为第三个参数异常:我对此很熟悉,但我需要标题,我只想在处理完标题后将其删除。请参阅-这建议您在使用'CURLOPT_HEADER'@NullUserException时应传递一个布尔值作为第三个参数:我很熟悉,但我需要标题,我只想在处理完标题后将其删除m、
file()
不返回头,因此这是不必要的。
file()
不返回头,因此这是不必要的。