PHP执行Linux命令实现文件压缩
用PHP调用Linux的命令行 ,执行压缩命令,OK,马上行动!
/*拆分成3个txt文件 分别是wow_1.txt wow_2.txt 和 wow_3.txt 全部放到 Exl_file 目录下*/
代码如下 | 复制代码 |
$outputs=array(); |
/*用php的exec执行Linux命令 括号里的字符串就是你在Linux命令窗口里敲的命令;
第二个参数是 linux执行该命令后返回的结果数组;
linux执行返回的每一条结果依次存入该数组
第三个参数是结果,如果执行成功,则Linux返回结果值为0,如果执行失败,则结果值不为0
*/
代码如下 | 复制代码 |
exec("zip ./Exl_file/wow.zip ./Exl_file/wow_1.txt ./Exl_file/wow_2.txt ./Exl_file/wow_3.txt",$outputs,$rc);
|
你可以把 if($rc!=0) 改成 if(1==1) 查看Linux执行命令返回的结果行,如下图:
代码如下 | 复制代码 |
adding: Exl_file/wow_1.txt (deflated 96%) adding: Exl_file/wow_2.txt (deflated 97%) adding: Exl_file/wow_3.txt (deflated 97%) |
可以看到执行返回的信息全部输入到了 $outputs 数组中,*.zip文件生成成功
php提供了system(),exec(),passthru()这几个函数来调用外部的命令.
他们的区别 :
system() 输出并返回最后一行shell结果。
exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。
passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。
相同点:都可以获得命令执行的状态码
一个php调用zip实现方法,这个在windows中的
#upload.php
代码如下 | 复制代码 |
<table border='0' > <form ENCTYPE="multipart/form-data" action="upsave.php" method="post"> <tr> <td>如果是*.ZIP的文件会被自动解压缩<br> <INPUT NAME="MyFile" TYPE="File" size="50"> </td> </tr> <tr> <td colspan='2' align="center"> <input type="Submit" value=" 上传 " class=iwhite> <input type="reset" value=" 重填 " class=iwhite> </td> </tr> </table> </body> </html> <? //upsave.php //保存上传的文件 $filename="$MyFile_name"; copy($MyFile,"$filename"); unlink($MyFile); //判断是否是ZIP文件 $expand_name=explode(".",$filename); if($expand_name[1] == "zip" or $expand_name[1] == "ZIP") { $str="pkunzip.exe -e $filename "; exec($str); unlink($filename); } ?> |
代码如下 | 复制代码 |
$uAgent = $_SERVER['HTTP_USER_AGENT']; $osPat = "mozilla|m3gate|winwap|openwave|Windows NT|Windows 3.1|95|Blackcomb|98|ME|X Window|ubuntu|Longhorn|AIX|Linux|AmigaOS|BEOS|HP-UX|OpenBSD|FreeBSD|NetBSD|OS/2|OSF1|SUN"; if(preg_match("/($osPat)/i", $uAgent )) //winwap 模拟WAP手机上网的一个浏览器; openwave|后面为各pc操作系统 { echo "电脑访问"; } else { echo "手机访问"; } echo '<br/>'.$uAgent; |
现在我们事完整的把实例写成一个文件
代码如下 | 复制代码 |
$uachar = "/(nokia|sony|ericsson|mot|samsung|sgh|lg|philips|panasonic|alcatel|lenovo|cldc|midp|mobile|wap)/i"; if(($ua == '' || preg_match($uachar, $ua))&& !strpos(strtolower($_SERVER['REQUEST_URI']),'wap')) if (!empty($Loaction)) exit; }
|
javascript中采用navigator.userAgent 来获取,但非智能机似乎不支持js。
支持js的移动客户端还可以用以下代码简单判断是不是windows电脑访问的
代码如下 | 复制代码 |
if(navigator.platform.indexOf('Win32')!=-1){ |
更多关于判断手机访问文章 http://www.111cn.net/phper/php-cy/44574.htm
bool get_magic_quotes_gpc ( void )返回当前 magic_quotes_gpc 配置选项的设置 记住,尝试在运行时设置 magic_quotes_gpc 将不会生效。默认情况下,PHP 指令 magic_quotes_gpc 为 on,它主要是对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。
例子
1. addslashes() 示例
代码如下 | 复制代码 |
<? // 输出:Is your name O'''reilly? |
返回值
关闭 magic_quotes_gpc 时返回 0,否则是 1。 在 PHP 5.4.O 起将使用返回 FALSE
例
代码如下 | 复制代码 |
<?php // 适用各个 PHP 版本的用法 // 如果使用 MySQL echo $lastname; // O'reilly |
php.ini:get_magic_quotes_gpc
在php的配置文件中,有个布尔值的设置,就是magic_quotes_runtime,当它打开时,
php的大部分函数自动的给从外部引入的(包括数据库或者文件)数据中的溢出字符加上反
斜线。 当然如果重复给溢出字符加反斜线,那么字符串中就会有多个反斜线,所以这时
就要用set_magic_quotes_runtime()与get_magic_quotes_runtime()设置和检测php.ini
文件中magic_quotes_runtime状态。 为了使自己的程序不管服务器是什么设置都能正常
执行。可以在程序开始用get_magic_quotes_runtime检测该设置的状态决定是否要手工处理
,或者在开始(或不需要自动转义的时候)用set_magic_quotes_runtime(0)关掉该设置。
magic_quotes_gpc设置是否自动为GPC(get,post,cookie)传来的数据中的'"\加上反斜
线。可以用get_magic_quotes_gpc()检测系统设置。如果没有打开这项设置,可以使用
addslashes()函数添加,它的功能就是给数据库查询语句等的需要在某些字符前加上了反
斜线。这些字符是单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)。
一个PHP二维数组按照一个字段排序程序实现代码,有需要的朋友可参考参考。二维数组
代码如下 | 复制代码 |
$arr = array ( array ( 'key' => '69931', 'hsex' => '女', 'username' => 'jiayang3401', 'clicks' => 10, 'hyinglou' => '无' ), array ( 'key' => '81', 'hsex' => '女', 'username' => 'susan', 'clicks' => 15, 'hyinglou' => '摄影名店' ), ); |
例
代码如下 | 复制代码 |
foreach($arr as $vo){ |
下面的例子摘取的是wordpress中的一段代码,里面有用到http://input,有需要的可以进一步研究。
代码如下 | 复制代码 |
if (!isset( $HTTP_RAW_POST_DATA ) ) { |
对php://input介绍,PHP官方手册文档有一段话对它进行了很明确地概述。
代码如下 | 复制代码 |
“php://input allows you to read raw POST data. It is a less memory intensive alternative to $HTTP_RAW_POST_DATA and does not need any special php.ini directives. php://input is not available with enctype=”multipart/form-data”. |
翻译成中文就是:
“php://input可以读取没有处理过的POST数据。相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小,并且不需要特殊的php.ini设置。php://input不能用于enctype=multipart/form-data”
读取POST数据PHPer们一定很熟悉$_POST这个内置变量。$_POST与php://input存在哪些关联与区别呢?另外,客户端向服务端交互数据,最常用的方法除了POST之外,还有GET。既然php://input作为PHP输入流,它能读取GET数据吗?这二个问题正是我们这节需要探讨的主要内容。
经验告诉我们,从测试与观察中总结,会是一个很凑效的方法。这里,我写了几个脚本来帮助我们测试。
@file 192.168.0.6:/phpinput_server.php 打印出接收到的数据
@file 192.168.0.8:/phpinput_post.php 模拟以POST方法提交表单数据
@file 192.168.0.8:/phpinput_xmlrpc.php 模拟以POST方法发出xmlrpc请求.
@file 192.168.0.8:/phpinput_get.php 模拟以GET方法提交表单表数phpinput_server.php与phpinput_post.php
代码如下 | 复制代码 |
<?php |
我们可以通过使用工具ngrep抓取http请求包(因为我们需要探知的是php://input,所以我们这里只抓取http Request数据包)。我们来执行测试脚本phpinput_post.php
代码如下 | 复制代码 |
@php /phpinput_post.phpHTTP/1.1 200 OK T 192.168.0.8:57846 -> 192.168.0.6:80 [AP] |
仔细观察,我们不难发现
1,$_POST数据,php://input 数据与httpd entity body数据是“一致”的
2,http请求中的Content-Type是application/x-www-form-urlencoded ,它表示http请求body中的数据是使用http的post方法提交的表单数据,并且进行了urlencode()处理。
(注:注意加粗部分内容,下文不再提示). http://www.k686.com
我们再来看看脚本phpinput_xmlrpc.php的原文件内容,它模拟了一个POST方法提交的xml-rpc请求。
代码如下 | 复制代码 |
<?php |
同样地,让我们来执行这个测试脚本
代码如下 | 复制代码 |
@php /phpinput_xmlrcp.phpHTTP/1.1 200 OK -------$_POST------------------ -------php://input------------- |
执行这个脚本的时候,我们通过ngrep抓取的http请求数据包如下
T 192.168.0.8:45570 -> 192.168.0.6:80 [AP]
POST /phpinput_server.php HTTP/1.1..
Host: 192.168.0.6..Content-Type: text/html..Content-Length: 75..Connec
tion: close....<?xml version="1.0">.<methodcall>. <name>jt_userinfo<
/name>.</methodcall>....同样,我样也可以很容易地发现:
1,http请求中的Content-Type是text/xml。它表示http请求中的body数据是xml数据格式。
2,服务端$_POST打印出来的是一个空数组,即与http entity body不一致了。这跟上个例子不一样了,这里的Content-Type是text/xml,而不是application/x-www-form-urlencoded
3,而php://input数据还是跟http entity body数据一致。也就是php://input数据和$_POST数据不一致了。
我们再来看看通过GET方法提交表单数据的情况,php://input能不能读取到GET方法的表单数据?在这里,我们稍加改动一下phpinput_server.php文件,将$_POST改成$_GET。
代码如下 | 复制代码 |
<?php |
同样,我们执行下一phpinput_get.php测试脚本,它模拟了一个通常情况下的GET方法提交表单数据。
代码如下 | 复制代码 |
@php /phpinput_get.phpHTTP/1.1 200 OK -------$_GET------------------ -------php://input-------------在这个时候,使用ngrep工具,捕获的相应的http请求数据包如下 T 192.168.0.8:36775 -> 192.168.0.6:80 [AP] |
比较POST方法提交的http请求,通常GET方法提交的请求中,entity body为空。同时,不会指定Content-Type和Content-Length。但是,如果强硬数据http entity body,并指明正确地Content-Type和Content-Length,那么php://input还可是读取得到http entity body数据,但不是$_GET数据。
实践中关于php://input用法总结:
1、只有Content-Type为application/x-www-data-urlencoded时,php://input数据才跟$_POST数据相一致。
2、PHP不能识别的Content-Type类型的时候,会将http请求包中相应的数据填入变量$HTTP_RAW_POST_DATA
3、只有Coentent-Type为multipart/form-data的时候,PHP不会将http请求数据包中的相应数据填入php://input,否则其它情况都会。填入的长度,由Coentent-Length指定。
4、Coentent-Type仅在取值为application/x-www-data-urlencoded和multipart/form-data两种情况下,PHP才会将http请求数据包中相应的数据填入全局变量$_POST。
5、php://input数据总是跟$HTTP_RAW_POST_DATA相同,但是php://input比$HTTP_RAW_POST_DATA更凑效,且不需要特殊设置php.ini
6、PHP会将PATH字段的query_path部分,填入全局变量$_GET。php://input读取不到$_GET数据,是因为$_GET数据作为query_path写在http请求头部(header)的PATH字段,而不是写在http请求的body部分。
相关文章
- 下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
Jupyter Notebook读取csv文件出现的问题及解决
这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06- 有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
- C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
- 这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
- 这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
- 这篇文章主要介绍了Go语言压缩和解压缩tar.gz文件的方法,实例分析了使用Go语言压缩文件与解压文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-05-03
php无刷新利用iframe实现页面无刷新上传文件(1/2)
利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25- 要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
- 又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
- 今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
- 这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
- 步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
- 本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
ant design中upload组件上传大文件,显示进度条进度的实例
这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29- 这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
- 举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07
- 这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 通常php.ini的位置在:复制代码 代码如下:/etc目录下或/usr/local/lib目录下。如果你还是找不到php.ini或者找到了php.ini修改后不生效(其实是没找对),请使用如下办法:1.新建php文件,写入如下代码复制代码 代码如下:<?phpe...2014-05-31