PHP所做大部分工作是从服务程序(比如数据库或文本文件)获取信息再发送到客户端(用户的Web浏览器),或是相反的过程。但PHP还支持另外一些特性,能够与其他Web站点进行交互,与其他服务程序通信,甚至能够通过FTP传输文件。本章将着重介绍与网络相关的PHP功能与函数。
第一个范例将展示如何从其他Web站点读取文本文件,第二个范例会创建一个URL检验程序(用于检查链接是否依然有效)。如何判断用户从哪个国家连接到我们的服务器。最后,我们将简要介绍一下cURL,这是一个功能强大的网络工具。
访问其他Web站点
虽然PHP本身通常被用于创建Web页面,但它也能够访问页面并与页面进行交互。这种功能在很多场合都能发挥作用,比如获取信息、编写搜索程序(在互联网上快速扫描来寻找特定数据的程序)等。令人惊奇的是,通过使用fopen()函数,访问其他Web站点就像访问本地硬盘一样方便。
fopen("http://www.wangzhanchengxu.com/","r");
fopen()函数不仅能够打开文件,还能够打开Web页面,因为后者也是服务器上的文件。虽然在实际应用时,页面文件一般是只读的,除非其权限是完全开放的(希望不要这样),但可以用于fopen()函数的参数是一样的(r、w和a)。需要提醒的一点是,在使用fopen()函数时,目录名后面必须有斜线,因为这个函数不支持重定向。前面的范例代码及下面这一行都是正确的:
fopen("http://www.wangzhanchengxu.com/index.php","r");
但下面这一行就不行。
fopen("http://www.wangzhanchengxu.com/dir","r");
(很多人并不会意识到www.wangzhanchengxu.com/dir会被重定向为www.wangzhanchengxu.com/dir/)。在打开文件之后,我们就可以像平常一样对其进行操作,使用file()、fgets()等函数来获取(或写入)数据。为了展示这个概念,我将利用雅虎的财经页面获取纽约股市上不同股票的报价。在进行实际操作之前需要说明一点,从其他Web站点获取信息的合法性是首先要考虑的问题。大多数站点包含了受版权保护的信息,未经允许使用它们是一种违法行为。这个利用雅虎的范例只是一个范例,并不是鼓励大家养成这种使用习惯!
利用PHP读取Web站点
这段代码将打开雅虎的报价页面,分析其中的数据,从而获得股票报价
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <?php if(isset($_GET['symbol']) and !empty($_GET['symbol'])){ $url=sprintf('http://quote.yahoo.com/d/quotes.csv?s=%s&f=nl1',$_GET['symbol']); $fp=fopen($url,'r') or die('Cannot access Yahoo!</body></html>'); $read=fgetcsv($fp); fclose($fp); if(strcasecmp($read[0], $_GET['symbol'])!=0){ echo '<p>The latest value for '.$read[0].'('.$_GET['symbol'].') is $'.$read[1].'</p>'; }else{ echo '<p>Invalid symbol!</p>'; } } ?> <p>Enter a NYSE stock symbol to get the latest price</p> <form action="get_quote.php" method="get"> <label for="symbol">Symbol(股票的代号) <input type="text" name="symbol" size="5" maxlength="5" placeholder="AAPL"></label> <input type="submit" name="submit" value="Fetch the Quote"> </form> </body> </html>