PHP网络编程(与网络互联)

一、 访问其他网站

① 直接以类似于访问自己硬盘上一个文本文件的方式来访问其他网站:

fopen('http://www.example.com/','r');

# fopen用来打开网页时其参数不变(仍然是'r','w'和'a'),不过现在我们访问的其他网站,所以只能和只读('r')的方式打开

## 必须在文件夹之后加一个反斜杠,因为fopen()函数不支持重定向,否则将会出错。

### PS:若是想要实现此功能并长期使用之前,我们应该先去调查一下其他网站上检索数据的合法性。大部分网站包含具有版权的信息。

② 完整例子:

<?php
if(isset($_GET['symbol']) && !empty($_GET['symnol'])) {
      $url = sprintf('http://quote.yahoo.com/d/quotes.csv/s=%s&f=nl1',$_GET['symbol']);
$fp = fopen($url,'r');
$read = fgetcsv($fp);
fclose($fp);
if(strcasecmp($read[0], $_GET['symbol'] != 0 )){
echo '<div>The lastest value for <span class="quote">'.$read[0].'</span>(<span class="quote">'.$_GET['symbol'].'</span>) is $<span class="quote">'.$read[1].'</span>';
}else{
    echo '<div class="error">Invalid symbol</div>';
}
}
?>

二、PHP scoket编程

1. 含义

    即两台计算机相互通信的通道

2. 使用

① 打开一个socket

$fp = fsockopen($url,$port,$error_number,$error_string,$timeout);

# 参数对应

fsockopen(URL,端口号,一个存放错误编号的变量,一个存放错误信息字符串的变量,超时等待时间));

## 只有第一个参数是必要的

② purse_url()

这个函数输入一个URL,通过将其结构分解成几个部分来将其转变为一个关联数组

# 组成URL的几个基本部分分别为:协议名(scheme)、主机名(host)、端口号(port)、文件路径(path)、查询参数(query)

③ 完整例子

<?php
function check_url($url){
$url_parse = parse_url($url);
$path = (isset($url_parse['path'])) ? $url_parse['path'] : '/';
$port = (isset($url_parse['port'])) ? $url_parse['port'] : '80';
if($fp = fsockopen($url_parse['host'], $port, $errno, $error, 30)){
$send = "HEAD $path HTTP/1.1\r\n";
$send .= "HOST:{$url_parse['host']}\r\n";
$send .= "CONNECTION:Close\r\n\r\n";
fwrite($fp, $send);
$data = fget($fp,128);
fclose($fp);
list($response,$code) = explode(' ', $data);
if($code == 200){
return array($code, 'good');
}else{
return array($code, 'bad');
}
}else{
return array($code, 'bad');
}
}
$urls = array(
'http://www.larryullman.com/',
'http://www.larryullman.com/wp-admin/',
'http://www.yiiframework.com/tutorials/',
'http://video.google.com/videoplay?docid=5137581991288263801&q=loose+change'
);
echo "<h2>Validating URLs</h2>";
set_time_limit(0);
foreach ($urls as $url) {
list($code, $class) = check_url($url);
echo '<p><a href="\'$url\" target="\'hew\">$url</a>(<span class="\$class\">$code</span>)</p>\n';
}
?>

三、使用IP地址查询

  下面的例子会使用一个与网络相关的PHP函数:gethostbyname()函数。该函数返回给定域名的IP地址。

  要使用IP地址进行地理地址查询,必须连接到GeoIP数据库。这里使用由freegeoip.net提供的简单的在线服务

  其请求路径格式要求为:http://freegeoip.net/(数据格式)/(要查询的IP地址)

  完整示例如下:

<?php
function show_ip_info($ip){
$url = 'http:/freegeoip.net/csv/' .$ip;
$fp = fopen($fp);
$read = fgetcsv($fp);
fclose($fp);
echo "<p>IP Address: $ip<br/>
Country:$read[2]<br/>
City, State:$read[5],$read[3]<br/>
Latitude:$read[7]<br/>
Longtude:$read[8]</p>";
}
echo '<h2>Our spies tell us the following informatin about you<br/>';
show_ip_info($_SERVER['REMOTE_ADDR']);
$url = 'www.etropy.ch';
echo '<h2>Our spies tell us the following informatin about the URL $url</h2>';
show_ip_info(gethostbyname($url));
  ?>

  四、使用CURL

  1. 初始化

curl_init('www.example.com'); 或 curl_init();

  2. 执行函数

curl_exec($curl);

  3. CURL方法:

  ① 如果发生错误,直接运行失败:CURLOPT_FAILONERROR

curl_setopt($curl, CURLOPT_FOLLOWERROR,1);

  ② 支持重定向:CURLOPT_FOLLOWLOCATION

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

  ③ 设置是否将处理结果存入一个变量的选项:CURLOPT_RETURNTRANSFER

curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);

  ④ 设置超时时间:CURLOPT_TIMEOUT

# 设置尝试执行该事务的时长,以秒为单位,在互联网的时间时,5秒简直就是“无限长”了

  curl_setopt($curl, CURLOPT_TIMEOUT, 5);

  ⑥ 设置curl使用POST方法:CURLOPT_POST

  curl_setopt($curl, CURLOPT_POST, 1);

  ⑦ 设置POST数据:CURLOPT_POSTFIELED

curl_setopt($curl, CURLOPT_POSTFIELED, 'name=foo&pass=bar&format=csv');

  ⑧ 如果网页有HTTP身份验证保护,请使用如下设置:CURLOPT_USERPWD

curl_setopt($curl, CURLOPT_USERPWD, 'username:password');

  4. 完整示例

<?php
$url = 'http://localhost/service.php';
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_FAILONERROR, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);;
curl_setopt($curl, CURLOPT_TIMEOUT, 5);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, 'name=foo&pass=bar&format=csv');
$r = curl_exec($curl);
curl_close();
print_r($r);
?>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容

  • cURL是一个利用URL语法规定来传输文件和数据的工具,支持很多协议和选项,如HTTP、FTP、TELNET等,能...
    司马东阳阅读 1,440评论 0 6
  • 原文地址:PHPcURL库函数抓取页面内容(转)作者:巴克 cURL是一个利用URL语法规定来传输文件和数据的工具...
    司马东阳阅读 1,183评论 0 3
  • 转载自:http://www.cnblogs.com/txw1958/archive/2013/01/19/286...
    php_bruce阅读 2,271评论 1 5
  • “至亲至疏夫妻”这句诗,出自唐代诗人李冶的《八至》。我想等我再吃多几年米饭,一定对这首诗有更多的感受,就如我读《红...
    小路灯阅读 3,617评论 8 8
  • 今天大概是来南京感觉最冷的一天,办公室里有空调,开了也没用,不如不开。 七点下班,站在空荡荡的站台...
    七七行记阅读 311评论 0 0