fsockopen 实例函数

 更新时间:2016年11月25日 15:59  点击:1981

我们经常会采集其它网站上的内容,以前有讲过用fopen,filecontent,curl等函数实例,今天我们就来fsockopen来实现这种读取远程 服务器上的图片方法吧。

<?php
function getFileSize($url){ 
 $url = parse_url($url);
 if($fp = @fsockopen($url['host'],empty($url['port'])?80:$url['port'],$error)){
  fputs($fp,"GET ".(empty($url['path'])?'/':$url['path'])." HTTP/1.1rn");
  fputs($fp,"Host:$url[host]rnrn");
  while(!feof($fp)){
   $tmp = fgets($fp);
   if(trim($tmp) == ''){
    break;
   }else if(preg_match('/Content-Length:(.*)/si',$tmp,$arr)){
    return trim($arr[1]);
   }
  }
  return null;
 }else{
  return null;
 }
}
?>


  调用方法很简单,代码如下:
<?php
echo getFileSize(http://www.111cn.net/banner/banner.gif/)
?>

您没有足够的执行许可。例如,如果试图访问的 ASP 页所在的目录权限设为“无”,或者,试图执行的 CGI 脚本所在的目录权限为“只允许脚本”,将出现此错误信息。若要修改执行权限,请在 Microsoft 管理控制台 (MMC) 中右击目录,然后依次单击属性和目录选项卡,确保为试图访问的内容设置适当的执行权限。

  您没有将试图执行的文件类型的脚本映射设置为识别所使用的谓词(例如,GET 或 POST)。若要验证这一点,请在 MMC 中右击目录,依次单击属性、目录选项卡和配置,然后验证相应文件类型的脚本映射是否设置为允许所使用的谓词。

  403.2 - 读访问被禁止。验证是否已将IIS设置为允许对目录进行读访问。另外,如果您正在使用默认文件,请验证该文件是否存在。

  403.3 - 写访问被禁止。验证IIS权限和NTFS限是否已设置以便向该目录授予写访问权。

  403.4 - 要求 SSL.禁用要求安全通道选项,或使用 HTTPS 代替 HTTP 来访问该页面。

  403.5 - 要求 SSL 128.禁用要求 128 位加密选项,或使用支持 128 位加密的浏览器以查看该页面。

  403.6 - IP地址被拒绝。服务器配置拒绝访问您目前的IP地址。

  403.7 - 要求客户端证书。您已把您的服务器配置为要求客户端身份验证证书,但您未安装有效的客户端证书。

  403.8 - 站点访问被拒绝。您已为您用来访问服务器的域设置了域名限制。

  403.9 - 用户数过多。与该服务器连接的用户数量超过了IIS设置的连接数。

  403.12 - 拒绝访问映射表。您要访问的页面要求提供客户端证书,但映射到您的客户端证书的用户 ID 已被拒绝访问该文件。

  404 - 未找到。发生此错误的原因是您试图访问的文件已被移走或删除。

  500 - 内部服务器错误。造成500错误常见原因有:ASP语法出错、ACCESS数据库连接语句出错、文件引用与包含路径出错、使用了服务器不支持的组件如FSO等

  500.12 - 服务器错误:Web 服务器上的应用程序正在重新启动。这表示您在 IIS 重新启动应用程序的过程中试图加载 ASP 页。刷新页面后,此信息即会消失。如果刷新页面后,此信息再次出现,可能是防病毒软件正在扫描 Global.asa 文件。

  500-100.ASP - ASP 错误。如果试图加载的 ASP 页中含有错误代码,将出现此错误信息。若要获得更确切的错误信息,请禁用友好 HTTP 错误信息。默认情况下,只会在默认 Web 站点上启用此错误信息。

  502 - 网关错误。如果试图运行的 CGI 脚本不返回有效的 HTTP 标头集,将出现此错误信息。

  1、错误号401.1 - 未经授权:访问由于凭据无效被拒绝。由于用户匿名访问使用的账号(默认是IUSR_机器名)被禁用,或者没有权限访问计算机,将造成用户无法访问。

  解决方案:

  (1)查看IIS管理器中站点安全设置的匿名帐户是否被禁用,如果是,请尝试用以下办法启用:

  控制面板->管理工具->计算机管理->本地用户和组,将IUSR_机器名账号启用。如果还没有解决,请继续下一步。

  (2)查看本地安全策略中,IIS管理器中站点的默认匿名访问帐号或者其所属的组是否有通过网络访问服务器的权限,如果没有尝试用以下步骤赋予权限:

  开始->程序->管理工具->本地安全策略->安全策略->本地策略->用户权限分配,双击“从网络访问此计算机”,添加IIS默认用户或者其所属的组。

  注意:一般自定义 IIS默认匿名访问帐号都属于组,为了安全,没有特殊需要,请遵循此规则。

  2、错误号401.2 HTTP 错误 401.2 - 未经授权:访问由于服务器配置被拒绝。原因:关闭了匿名身份验证。

  解决方案:

  运行inetmgr,打开站点属性->目录安全性->身份验证和访问控制->选中“启用匿名访问”,输入用户名,或者点击“浏览”选择合法的用户,并两次输入密码后确定。

  3、错误号:401.3 HTTP 错误 401.3 - 未经授权:访问由于 ACL 对所请求资源的设置被拒绝。

  原因:IIS匿名用户一般属于Guests组,而我们一般把存放网站的硬盘的权限只分配给administrators组,这时候按照继承原则,网站文件夹也只有administrators组的成员才能访问,导致IIS匿名用户访问该文件的NTFS权限不足,从而导致页面无法访问。

100 - 表示已收到请求的一部分,正在继续发送余下部分。

  101 - 切换协议。

  2xx - 成功。服务器成功地接受了客户端请求: 

  200 - 确定。客户端请求已成功。

  201 - 已创建。

  202 - 已接受。

  203 - 非权威性信息。

  204 - 无内容。

  205 - 重置内容。

  206 - 部分内容。

  300 - 针对收到请求,服务器可执行多种操作。

  301 - 永久移动转移,请求的内容已永久移动其他新位置。

  302 - 临时移动转移,请求的内容已临时移动新的位置。

  304 - 未修改。自从上次请求后,请求的内容未修改过。

  307 - 临时重定向。服务器目前从不同位置响应请求,但请求者应继续使用原有位置来进行以后的请求。

  400 - 错误的请求。

  401 - 访问被拒绝。IIS 定义了许多不同的 401 错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在 IIS 日志中显示:

  401.1 - 登录失败。

  401.2 - 服务器配置导致登录失败。

  401.3 - 由于 ACL 对资源的限制而未获得授权。

  401.4 - 筛选器授权失败。

  401.5 - ISAPI/CGI 应用程序授权失败。

  401.7 - 访问被 Web 服务器上的 URL 授权策略拒绝。这个错误代码为 IIS 6.0 所专用。

  403 - 禁止访问:IIS 定义了许多不同的 403 错误,它们指明更为具体的错误原因:

  403.1 - 执行访问被禁止。

  403.2 - 读访问被禁止。

  403.3 - 写访问被禁止。

  403.4 - 要求 SSL。

  403.5 - 要求 SSL 128。

  403.6 - IP 地址被拒绝。

  403.7 - 要求客户端证书。

  403.8 - 站点访问被拒绝。

  403.9 - 用户数过多。

  403.10 - 配置无效。

  403.11 - 密码更改。

  403.12 - 拒绝访问映射表。

  403.13 - 客户端证书被吊销。

  403.14 - 拒绝目录列表。

  403.15 - 超出客户端访问许可。

  403.16 - 客户端证书不受信任或无效。

  403.17 - 客户端证书已过期或尚未生效。

  403.18 - 在当前的应用程序池中不能执行所请求的 URL.这个错误代码为 IIS 6.0 所专用。

  403.19 - 不能为这个应用程序池中的客户端执行 CGI.这个错误代码为 IIS 6.0 所专用。

  403.20 - Passport 登录失败。这个错误代码为 IIS 6.0 所专用。

  404 - 未找到请求的内容。

  404.0 - 未找到文件或目录。

  404.1 - 无法在所请求的端口上访问 Web站点。

  404.2 - Web 服务扩展锁定策略阻止本请求。

  404.3 - MIME 映射策略阻止本请求。

  405 - 用来访问本页面的 HTTP 谓词不被允许(方法不被允许) 。

  406 - 客户端浏览器不接受所请求页面的 MIME 类型。

  407 - 要求进行代理身份验证。

  412 - 前提条件失败。

  413 - 请求实体太大。

  414 - 请求 URI 太长。

  415 - 不支持的媒体类型。

  416 - 所请求的范围无法满足。

  417 - 执行失败。

  423 - 锁定的错误。

  500 - 服务器内部错误。

  500.12 - 应用程序正忙于在 Web 服务器上重新启动。

  500.13 - Web 服务器太忙。

  500.15 - 不允许直接请求 Global.asa。

  500.16 - UNC 授权凭据不正确。这个错误代码为 IIS 6.0 所专用。

  500.18 - URL 授权存储不能打开。这个错误代码为 IIS 6.0 所专用。

  500.100 - 内部 ASP 错误。

  501 - 服务器无法完成请求的功能。

  502 - 服务器用作网关或代理服务器时收到了无效响应。

  502.1 - CGI 应用程序超时。

  502.2 - CGI 应用程序出错。

  503 - 服务不可用。这个错误代码为 IIS 6.0 所专用。

  504 - 网关超时。

  505 - HTTP 版本不受支持。

  常见的 HTTP 状态代码及其原因

  200 - 成功。IIS 已成功处理发送的请求。

  304 - 未修改。客户端请求的内容已在其缓存中,内容自缓存以来尚未被修改过。客户端使用内容的缓存副本,而不从服务器下载内容。

  401.1 - 登录失败。登录不成功,可能因为用户名或密码访问无效。

  401.3 - 服务列表对资源的限制而未获得授权。表示存在NTFS权限问题,或者对试图访问的文件具备相应的权限,也可能发生此错误。

  403.1 - 执行访问被禁止。

preg_match_all -- 进行全局正则表达式匹配

说明

int preg_match_all ( string pattern, string subject, array matches [, int flags] )

在 subject 中搜索所有与 pattern 给出的正则表达式匹配的内容并将结果以 flags 指定的顺序放到 matches 中。 

搜索到第一个匹配项之后,接下来的搜索从上一个匹配项末尾开始。 

flags 可以是下列标记的组合(注意把 PREG_PATTERN_ORDER 和 PREG_SET_ORDER 合起来用没有意义): 

PREG_PATTERN_ORDER

对结果排序使 $matches[0] 为全部模式匹配的数组,$matches[1] 为第一个括号中的子模式所匹配的字符串组成的数组,以此类推。 

例子:
<?php
preg_match_all ("|<[^>]+>(.*)</[^>]+>|U","<b>example: </b><div align=left>this is a test</div>",$out, PREG_PATTERN_ORDER);
print $out[0][0].", ".$out[0][1]."n";
print $out[1][0].", ".$out[1][1]."n";
?> 

本例将输出: 
<b>example: </b>, <div align=left>this is a test</div>
example: , this is a test

因此,$out[0] 包含匹配整个模式的字符串,$out[1] 包含一对 HTML 标记之间的字符串。 

PREG_SET_ORDER

对结果排序使 $matches[0] 为第一组匹配项的数组,$matches[1] 为第二组匹配项的数组,以此类推。 

例子:
<?php
preg_match_all ("|<[^>]+>(.*)</[^>]+>|U","<b>example: </b><div align=left>this is a test</div>",$out, PREG_SET_ORDER);
print $out[0][0].", ".$out[0][1]."n";
print $out[1][0].", ".$out[1][1]."n";
?> 

本例将输出: 
<b>example: </b>, example:
<div align=left>this is a test</div>, this is a test

本例中,$matches[0] 是第一组匹配结果,$matches[0][0] 包含匹配整个模式的文本,$matches[0][1] 包含匹配第一个子模式的文本,以此类推。同样,$matches[1] 是第二组匹配结果,等等。 

PREG_OFFSET_CAPTURE

如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在 subject 中的偏移量。本标记自 PHP 4.3.0 起可用。 

如果没有给出标记,则假定为 PREG_PATTERN_ORDER。 

返回整个模式匹配的次数(可能为零),如果出错返回 FALSE。 

例子 1. 从某文本中取得所有的电话号码:
<?php
preg_match_all ("/(? (d{3})? )? (?(1) [-s] ) d{3}-d{4}/x",
"Call 555-1212 or 1-800-555-1212", $phones);
?> 

例子 2. 搜索匹配的 HTML 标记(greedy):
<?php
//  是一个逆向引用的例子,其在 PCRE 中的含义是
// 必须匹配正则表达式本身中第二组括号内的内容,本例中
// 就是 ([w]+)。因为字符串在双引号中,所以需要
// 多加一个反斜线。
$html = "<b>bold text</b><a href=howdy.html>click me</a>";
preg_match_all ("/(<([w]+)[^>]*>)(.*)(</>)/", $html, $matches);
for ($i=0; $i< count($matches[0]); $i++) {
echo "matched: ".$matches[0][$i]."n";
echo "part 1: ".$matches[1][$i]."n";
echo "part 2: ".$matches[3][$i]."n";
echo "part 3: ".$matches[4][$i]."nn";
}
?> 

本例将输出: 
matched: <b>bold text</b>
part 1: <b>
part 2: bold text
part 3: </b>
matched: <a href=howdy.html>click me</a>
part 1: <a href=howdy.html>
part 2: click me
part 3: </a>

php execel 导出xml 程序

<?php

class Excel_XML
{

  
    private $header = "<?xml version="1.0" encoding="UTF-8"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">";

    private $footer = "</Workbook>";

    private $lines = array ();

 
    private $worksheet_title = "Table1";

    private function addRow ($array)
    {

        // initialize all cells for this row
        $cells = "";

        // foreach key -> write value into cells
        foreach ($array as $k => $v):

            $cells .= "<Cell><Data ss:Type="String">" . utf8_encode($v) . "</Data></Cell>n";

        endforeach;

        // transform $cells content into one row
        $this->lines[] = "<Row>n" . $cells . "</Row>n";

    }

    public function addArray ($array)
    {

        // run through the array and add them into rows
        foreach ($array as $k => $v):
            $this->addRow ($v);
        endforeach;

    }


    public function setWorksheetTitle ($title)
    {

        // strip out special chars first
        $title = preg_replace ("/[|:|/|?|*|[|]]/", "", $title);

        // now cut it to the allowed length
        $title = substr ($title, 0, 31);

        // set title
        $this->worksheet_title = $title;

    }

    function generateXML ($filename)
    {

        // deliver header (as recommended in php manual)
        header("Content-Type: application/vnd.ms-excel; charset=UTF-8");
        header("Content-Disposition: inline; filename="" . $filename . ".xls"");

        // print out document to the browser
        // need to use stripslashes for the damn ">"
        echo stripslashes ($this->header);
        echo "n<Worksheet ss:Name="" . $this->worksheet_title . "">n<Table>n";
        echo "<Column ss:Index="1" ss:AutoFitWidth="0" ss:Width="110"/>n";
        echo implode ("n", $this->lines);
        echo "</Table>n</Worksheet>n";
        echo $this->footer;

    }

}

?>

实例

<?php

// include the php-excel class
require (dirname (__FILE__) . "/class-excel-xml.inc.php");

// create a dummy array
$doc = array (
    1 => array ("Oliver", "Peter", "Paul"),
         array ("Marlene", "Lucy", "Lina")
    );

// generate excel file
$xls = new Excel_XML;
$xls->addArray ( $doc );
$xls->generateXML ("mytest");

?>

php strtok 与 strstr 比较
// 完整匹配中间的box 

04 echo strstr('aaaaaaaaaaaboaaaaaaaaaaaaboxcccccccccbcccccccccccccc','box')."n"; 

05 // 完整匹配中间的box 不因前而的b而停止 

06 echo strstr('aaaaaaAbaaa aaaa aaaaaaaaaboxccccccccccccboxccccccccccc','box')."n"; 

07 // 有两个关键字时, 遇到第一个停止. 

08 echo strstr('Subscrtibe our to free newsletter about New Freew to','to')."n"; 

09   

10 // 用strtok往回取 

11   

12 // 没有box冲突时, 截取是正常的. 

13 echo strtok('aaaaaaaaaaaaaaaaaaaaaaaboxccccccccccccccccccccccc','box')."n"; 

14 // 当前面有关键字中的任意一个字节时, 变态现象开始.注意看sb 及io那儿. 

15 echo strtok('aaaaaaAaaa aaaa aaaaa sb aaaacccccc iox iccccccccccccccccc','box')."n"; 

16 // 难理解吧, 你应该看到了our中的o在关键<SPAN class=t_tag onclick=tagshow(event) href="tag.php?name=%D7%D6%B7%FB">字符</SPAN>中.. 

17 echo strtok('Subscribe our free newsletter about New Freew','to'); 

18   

19 //事实证明,  strstr 是支持多字符串的, 而strtok在关键字符冲突时,仅支持单个字节截取.

[!--infotagslink--]

相关文章

  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • PHP函数分享之curl方式取得数据、模拟登陆、POST数据

    废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07
  • php中的foreach函数的2种用法

    Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
  • C语言中free函数的使用详解

    free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
  • PHP函数strip_tags的一个bug浅析

    PHP 函数 strip_tags 提供了从字符串中去除 HTML 和 PHP 标记的功能,该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。由于 strip_tags() 无法实际验证 HTML,不完整或者破损标签将导致更多的数...2014-05-31
  • SQL Server中row_number函数的常见用法示例详解

    这篇文章主要给大家介绍了关于SQL Server中row_number函数的常见用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08
  • PHP加密解密函数详解

    分享一个PHP加密解密的函数,此函数实现了对部分变量值的加密的功能。 加密代码如下: /* *功能:对字符串进行加密处理 *参数一:需要加密的内容 *参数二:密钥 */ function passport_encrypt($str,$key){ //加密函数 srand(...2015-10-30
  • php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法

    最近遇到一个问题,就是在使用php的mail函数发送utf-8编码的中文邮件时标题出现乱码现象,而邮件正文却是正确的。最初以为是页面编码的问题,发现页面编码utf-8没有问题啊,找了半天原因,最后找到了问题所在。 1.使用 PEAR 的...2015-10-21
  • C#中加载dll并调用其函数的实现方法

    下面小编就为大家带来一篇C#中加载dll并调用其函数的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#虚函数用法实例分析

    这篇文章主要介绍了C#虚函数用法,实例分析了C#中虚函数的功能与基本使用技巧,需要的朋友可以参考下...2020-06-25
  • PHP编码转换函数mb_convert_encoding与iconv用法

    文章来实现一个PHP编码转换函数mb_convert_encoding与iconv用法,希望例子能帮助到各位。 将一个短信接口代码从apache迁移到nginx+php-fpm后,发现无法发出短信了,查...2016-11-25