php 从url中提取参数名和参数值实例

 更新时间:2016年11月25日 15:45  点击:1804
如果我使用的是动态url后面会带上如a.php?a=1&b=2这种,那么我要提取a,b参数名与参数值要怎么操作呢,下面我来介绍一个自己用的实例。


在已知参数名的情况下,获取参数值,使用正则表达式能很容易做到。js的实现方法如下:

 代码如下 复制代码

function getValue(url, name) {
 var reg = new RegExp('(\?|&)' + name + '=([^&?]*)', 'i');
 var arr = url.match(reg);

 if (arr) {
  return arr[2];
 }

 return null;
}

如果想获取所有的参数名和其对应的值,同样也可以使用正则表达式的方法,js实现方法:

 代码如下 复制代码

function getKeyValue(url) {
 var result = {};
 var reg = new RegExp('([\?|&])(.+?)=([^&?]*)', 'ig');
 var arr = reg.exec(url);

 while (arr) {
  result[arr[2]] = arr[3];

  arr = reg.exec(url);
 }

 return result;
}

注意在js中用于匹配的还有一个叫match,match是字符串的方法,而exec是RegExp对象的方法。使用字符串的match方法,同时正则表达式指定为全局匹配,那么正则表达式中的分组将没有用,返回的结果是所有匹配正则表达式的子字符串。exec方法没有使用全局匹配标志时,返回的时间第一个匹配的子字符,如果使用了全局匹配标志,第一次执行从头开始匹配符号的字符串,再次调用,就从上一次匹配结果后开始匹配。

下面提供php的实现方法:

 代码如下 复制代码

function getKeyValue($url) {
 $result = array();
 $mr = preg_match_all('/(?|&)(.+?)=([^&?]*)/i', $url, $matchs);

 if ($mr !== FALSE) {
  for ($i = 0; $i < $mr; $i++) {
   $result[$matchs[2][$i]] = $matchs[3][$i];
  }
 }

 return $result;
}

php的preg_match_all方法把匹配的结果存放在第三个指定的参数中,是一个二维数组。第一维度是分组信息的数组,即第一个数组存放的是所有匹配的完整字符串,第二个数组存放的是第一个()对应的值得,第二维度是分组的值。

在php中如果你要对文件进行一些操作是很方便的事情了,因为php提供了大量的php文件操作函数,下面我来给大家总结一下php文件操作方法与函数。

1、获取文件名:basename();

2、获取文件所在的目录:dirname();

3、pathinfo()获取文件信息,返回结果为一个array,包括路径、文件全名、文件名和扩展名。例如:

 代码如下 复制代码

$file = '/com/netingcn/error.log';
print_r(pathinfo($file));

结果为:

Array(
    [dirname] => /com/netingcn
    [basename] => error.log
    [extension] => log
    [filename] => error
)

4、判断文件是否存在:is_file();

5、判断目录是否存在:is_dir();

6、判断文件或目录是否存在:file_exists();

7、读取文件所有内容:file()或file_get_contents(),其中file()返回的是一个一行为元素的array,file_get_contents()把文件全部内容作为一个String返回;

8、写文件fwrite,如:

 代码如下 复制代码

$handler = fopen($file, 'w'); // w 会冲掉以前的内容、a 是追加
fwrite($handler, 'content');
fclose($handler);              //记得关闭打开的文件句柄9、文件读取操作有很多,下面简单介绍几个:

$handler = fopen($file, 'r');

while(!feof($handler)) {
    $datas[] = fgets($handler);  //读取一行内容
}

while(!feof($handler)) {
    $datas[] = fgetss($handler); //读取一行内容并过来html标记
}

while(!feof($handler)) {
    $datas[] = fgetcsv($handler); //读取一行内容并解析csv字段
}

$content = fread($handler, $strLength); //读取指定长读的字符

fclose($handler);


 PHP 读文件内容,此文件为txt,路径$filePath为'list.txt', 即放在和php文件同一个目录,

    注意:

          本人的txt的内容样式如下:

                  Email,FirstName,LastName...

                  neil@ddd.com,neil,zhou...

                  ...

具体实现根据自身情况修改。

 代码如下 复制代码

    $fp = fopen($filePath,"r ");
    $a = read_content_to_array($fp);   // 取得文本文件中的内容
    fclose($fp);

 

/**
    @desc read file content to array
    @params $fp: file resource
    @return array
*/
function read_content_to_array($fp){
    $i=0;
    $a = array();
    while (!feof ($fp)) {            //while循环,条件:没到文件的末端。


        $buffer = fgets($fp, MAX_BYTES_PER_ROW);  //fgets() 函数用于从文件中逐行读取文件,,读取的字节数。默认是 1024 字节。MAX_BYTES_PER_ROW为自定义的一个常量,读取的字节数


        $block=explode(STR_TD_DIVIDER,$buffer); //用分隔符对操作的一行($buffer)进行分割,返回由字符串组成的数组。STR_TD_DIVIDER为自定义的一个常量,每行中各个字段之间的分隔符。


        $a[$i]=$block;
        $i=$i+1;                     //通过while循环,带动i值递增,实现数组构建。
    }
    return $a;
}

 

PHP 写内容到txt文件中

 代码如下 复制代码

$handle = fopen($filePath, "w ");
fwrite($handle,$str);
fclose($handle);

怎么样,是不是看起来很简单呢?下面是一些简单知识的总结:

fopen()
fopen() 函数用于在 PHP 中打开文件,此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪种模式来打开文件.

模式      描述
r         只读。在文件的开头开始。
r+        读/写。在文件的开头开始。
w         只写。打开并清空文件的内容;如果文件不存在,则创建新文件。
w+        读/写。打开并清空文件的内容;如果文件不存在,则创建新文件。
a         追加。打开并向文件文件的末端进行写操作,如果文件不存在,则创建新文件。
a+        读/追加。通过向文件末端写内容,来保持文件内容。
x         只写。创建新文件。如果文件以存在,则返回 FALSE。
x+        读/写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。
注释:如果 fopen() 无法打开指定文件,则返回 0 (false)。


feof()
检测 End-of-file
feof() 函数检测是否已达到文件的末端 (EOF),在循环遍历未知长度的数据时,feof() 函数很有用。注释:在 w 、a 以及 x 模式,您无法读取打开的文件!
if (feof($file)) echo "End of file";
 
fgets()
fgets() 函数用于从文件中逐行读取文件。在调用该函数之后,文件指针会移动到下一行。

本文章来给大家介绍关于php 字符串和数字比较一些问题,因为数字与字符在php中是不同的数据类型,所以在比较时可能会有很多的问题。

今天遇到一个问题,调用对方接口,按照接口说明,返回为数字0,1,2等等,其中0标示成功,其他表示不同的错误代码。程序通过 if ($ret == 0) 进行判断,开始程序是好的,今天出现问题了,由于对方接口修改,直接返回字母字符串作为错误信息提示,然后我这边就悲剧了,上述判断永远都为TRUE。

原因在于php是弱类型语言,所以可以对两个不同类型的变量进行比较操作,但最终进行比较前,php会把某一方转换称另一方一样的类型,这点很重要。如果是字符串和数字进行比较,那么php会把字符串强制转换称数字,对于纯字母的字符串,那么转换后就是0了,所以if ($ret == 0) 成了。

PHP手册/语言参考/运算符/比较运算符 可以找到.

在PHP里当两个数字型字符串(只含数字的字符串)进行比较的时候是直接转换成数值进行比较的
如下示例:(注意$a和$b两个变量的最后一位不相等)

 

 代码如下 复制代码

//示例1
<?php
$a = '511203199106034578';
$b = '511203199106034579';
if ($a==$b) {
echo 'equal';
} else {
echo 'notEqual';
}
?>

运行上面的程序却发现结果为equal(非我们认为的结果)

我们把$a与$b分别加一个字母a进去

 代码如下 复制代码


//示例2
<?php
$a = 'a511203199106034578';
$b = 'a511203199106034579';
if ($a==$b) {
echo 'equal';
} else {
echo 'notEqual';
}
?>

这次输出的是notEqual(正确的结果)

示例1为equal是因为PHP把两个数字型字符串转换成数字型,而这两个数字刚好相等如下示例

 代码如下 复制代码

<?php
$a = 511203199106034578;
$b = 511203199106034579;
echo $a; // 输出 5.1120319910603E+17 即511203199106030000
echo $b; // 输出 5.1120319910603E+17 即511203199106030000
?>

所以我们在示例1中得到的结果是equal

避免出现这种非预期结果的情况是使用类型比较符===如下示例(如果 $a 等于 $b,并且它们的类型也相同)

 代码如下 复制代码

//示例4
<?php
$a = '511203199106034578';
$b = '511203199106034579';
if ($a===$b) {
echo 'equal';
} else {
echo 'notEqual';
}
?>

这样我们就可以得到预期中的notEqual了

在网站的管理系统中,有时需要查看某个文件是否被修改过、在什么时间被修改的、最后的修改时间是什么时候,本实例就可以实现这个功能,对表单中提交的文件进行判断,检测出修改时间。


关键技术

   本实例主要应用filectime()和filemtime()函数,检测文件的incode最后改变时间和最后的修改时间,并应用date()函数对检测返回的时间戳进行格式化。
   filectime()函数,返回指定文件filename的inode最后改变时间,语法如下:
   int filectime(string filename);
   成功则返回UNIX时间戳,否则返回FALSE。
   filemtime()函数,返回指定文件filename的最后修改时间,语法如下:
   成功则返回UNIX时间戳,否则返回FALSE。
设计过程
  首先,设计网页页面。然后,创建一个表单,通过文件域提交要判断的文件。接着,获取表单中提交的文件路径,应用filectime()和filemtime()函数对提交的文件进行检测。最后,输出检测结果。
  index.php文件的关键代码如下:

 代码如下 复制代码


<?php
  $file=iconv("utf-8","gb2312",$_POST['files']);           //实现编码格式的转换
  if(file_exists($file)){                                  //判断文件是否存在
          $change_time=filectime($file);                   //获取文件的最后incode时间
          $time=date("Y-m-d h:i:s",$change_time);          //时间戳的格式化
          $last_time=filemtime($file);                     //获取文件的最后修改时间
          $times=date("Y-m-d h:i:s",$last_time);           //时间戳的格式化
   }else{
          $result="该文件不存在";
   }
   ?>


秘笈心法
  获取文件的最后访问时间。
  通过文件系统函数不但可以获取文件的最后修改时间,而且可以获取文件的最后访问时间,其应用的是fileatime()函数

在php中如果要实现多文件上传我们只要遍历表单就基本实现了一半,下面小编来给大家介绍PHP中上传多个文件到服务器实例,希望此方法对各位有用。

实例说明

上传图片到服务器,是程序开发过程中必不可少的一个功能。它不但可以达到图片共享的目的,而且可以提高网站的访问量,丰富网站的内容。在本实例中,讲解如何通过POST方式实现多图片上传。

关键技术

多文件上传的关键是如何定义上传文件元素的名称及如何判断上传文件的数量。在本实例中,以数组的形式定义上传文件的名称(上传文件的名称是“files[]”)。为了达到可以上传任意数量图片(4个图片以内)的目的,在对上传文件进行处理的过程中应用array_filter()函数和回调函数去除数组中的空元素。

  array_filter()函数,用回调函数过滤数组中的单元,语法如下:
  array array_filter(array input[,callback callback])


  array_filter()函数依次将input数组中的每个值传递到callback函数。如果callback函数返回TRUE,则input数组的当前值会被包含在返回的结果数组中,并且数组的键名保留不变。
  说明:在回调函数中不要对数组进行修改操作,例如,增加或者删除数组中的元素,如果一旦数组改变,那么此函数的运用也就没有意义了。如果没有提供callback()函数,array_filter()将删除input中本实例中定义的回调函数是check(),用于验证数组中的元素值是否为空,其语法如下:

 代码如下 复制代码


function check($var){//验证数组的返回值是否为空
          return($var!="");
  }

说明:通过POST方法实现多图片上传,在创建form表单时,必须指定enctype="multipart/form-data"属性。如果要通过隐藏域MAX_FILE_SIZE的值对上传文件的大小进行控制,那么必须将隐藏放置在上传文件的文件域之前,否则是不会起作用的。
设计过程


  (1)创建index.php文件。添加表单,设置文件域、提交按钮,使用POST方法,设置enctype="multipart/form-data",将数据提交到index_ok.php页,完成多个文件的上传操作,其关键代码如下:

 代码如下 复制代码

  <table width="750"border="0"cellspacing="0"cellpadding="0">
        <form action="index_ok.html"method="post"enctype="multipart/form-data"name="form1">
           <tr>
             <td width="100"height="25"align="right"class="STYLE1">内容1:</td>
             <td width="150"align="center"><input name="files[]"type="text"id="files[]"size="15"></td>
             <td align="left"><input name="picture[]"type="file"id="pcture[]"size>="30"></td>
           </tr>
           <tr>
             <td height="25"align="right"class="STYLE1">内容2:</td>
             <td width="center"><input name="files[]"type="text"id="files[]"size="15"></td>
             <td align="left"><input name="picture[]"type="file"id="pcture[]"size>="30"></td>
           </tr>
         <tr>
            <td colspan="3"align="center">
                 <input type="image"name="imageField"src="images/bg_09.jpg">&nbsp;&nbsp;&nbsp;&nbsp;
                 <input type="image"name="imgeField2"src="images/bg_11.jpg"></td>
            </tr>
          </form>
         </table>


    (2)在index.php文件中,连接数据库,读取数据库中存储的数据,实现上传文件的分页输出。代码请参考光盘中的相关内容。
    (3)创建index.php文件获取表单中提交的数据,将多个文件存储到服务器中,将文件的名称和存储路径存储到数据库中,其代码如下:

 代码如下 复制代码


<?php
    header("Content-type:text/html;charset=UTF-8");     //设置文件编码格式
    include"conn/conn.php";                             //包含数据库链接文件
    if($_POST[files]!=""){
          if(! is_dir("./upfile")){
                  mkdir("./upfile");                    //创建上传文件存储文件夹
          }
          $data=date("Y-m-d H:m:s");                    //定义时间
          function check($var){                         //验证数组的返回值是否为空
                     return($var!="");                  //如果不为空则返回数组元素
          }
          $files=array_filter($_POST["files"],"check");  //去除数组中空值
          $array=array_filter($_FILES["picture"]["name"],"check"); //去除数组中空值
          foreach=($aarray as $key=>value){             //循环读取数组中数据
                 $path='upfile/'.time().$key.strtolower(strstr($value,".")); //定义上传文件存储位置
                 move_uploaded_file($_FILES["picture"]["tmp_name"][$key],$path);  //执行上传操作
                 $query="insert into tb_up_file(file_test,data,file_name)values('$path','$data''$files[$key]')";
                 $result=mysql_query($query);
          }
          echo"<script>
          alert('图片上传成功');window.location.href='index.html';</script>";
         }
         ?>

[!--infotagslink--]

相关文章

  • Nest.js参数校验和自定义返回数据格式详解

    这篇文章主要给大家介绍了关于Nest.js参数校验和自定义返回数据格式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-28
  • Vue 组件复用多次自定义参数操作

    这篇文章主要介绍了Vue 组件复用多次自定义参数操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-27
  • 解决Springboot get请求是参数过长的情况

    这篇文章主要介绍了解决Springboot get请求是参数过长的情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-17
  • PHP中empty和isset对于参数结构的判断及empty()和isset()的区别

    废话不多说了,直接给大家贴代码了。<&#63;php class test{} $a1 = null; $a2 = ""; //$a3 = $a4 = 0; $a5 = '0'; $a6 = false; $a7 = array(); //var $a8; $a9 = new test(); for ($i=1; $i <=9 ; $i++) {...2015-11-24
  • java正则表达式判断前端参数修改表中另一个字段的值

    这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
  • mysql配置模板(my-*.cnf)参数详细说明

    mysql安装成功后有几个默认的配置模板,列表如下: my-huge.cnf : 用于高端产品服务器,包括1到2GB RAM,主要运行mysql my-innodb-heavy-4G.ini : 用于只有innodb的安装,最多有4GB RAM,支持大的查询和低流量 my-large.cnf : 用于...2015-03-15
  • 详解C#泛型的类型参数约束

    这篇文章主要介绍了C#泛型的类型参数约束的相关资料,文中讲解非常细致,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下...2020-07-31
  • C#中out参数、ref参数与值参数的用法及区别

    这篇文章主要给大家介绍了关于C#中out参数、ref参数与值参数的用法及区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • 处理@PathVariable注解允许参数为空、允许不传参数的问题

    这篇文章主要介绍了处理@PathVariable注解允许参数为空、允许不传参数的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-23
  • Java线程池中的各个参数如何合理设置

    这篇文章主要介绍了Java线程池中的各个参数如何合理设置操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-19
  • 详解Java后端优雅验证参数合法性

    这篇文章主要介绍了详解Java后端优雅验证参数合法性,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-18
  • vue+axios全局添加请求头和参数操作

    这篇文章主要介绍了vue+axios全局添加请求头和参数操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-24
  • SpringBoot接口接收json参数解析

    这篇文章主要介绍了SpringBoot接口接收json参数解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-19
  • pytorch 实现冻结部分参数训练另一部分

    这篇文章主要介绍了pytorch 实现冻结部分参数训练另一部分,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-27
  • C#向线程中传递多个参数的解决方法(两种)

    这篇文章主要介绍了C#向线程中传递多个参数的解决方法(两种)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • spring cloud gateway中如何读取请求参数

    这篇文章主要介绍了spring cloud gateway中如何读取请求参数的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-15
  • Postman参数化实现过程及原理解析

    这篇文章主要介绍了Postman参数化实现过程及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-08-13
  • 使用JavaScript获取URL中的参数(两种方法)

    这篇文章主要介绍了使用JavaScript获取URL中的参数(两种方法)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-11-22
  • 快速理解MySQL中主键与外键的实例教程

    主键与外键的关系,通俗点儿讲,我现在有一个论坛,有两张表,一张是主贴 thread,一张是回帖 reply先说说主键,主键是表里面唯一识别记录的字段,一般是帖子id,体现在访问的时候,例如是 thread.php&#63;id=1 表示我要访问的是帖子...2015-11-24
  • Vue中 axios delete请求参数操作

    这篇文章主要介绍了Vue中 axios delete请求参数操作,具有很好的参考价值,希望对大家有所 帮助。一起跟随小编过来看看吧...2020-08-26