php 将字数串打散为数组

今天在学习算法的过程中遇到了一道试题 :找出无重复字符串的长度。

在使用php解答的过程中需要将字符串的每个字符存入数组当中,因为很多小的函数长时间未使用所以有些遗忘,一番寻找之后找到了这个函数。

str_split — 将字符串转换为数组

说明

str_split ( string $string [, int $split_length = 1 ] ) : array

将一个字符串转换为数组。

参数

string

输入字符串。

split_length

每一段的长度。

返回值

如果指定了可选的 split_length 参数,返回数组中的每个元素均为一个长度为 split_length 的字符块,否则每个字符块为单个字符。

如果 split_length 小于 1,返回 FALSE。如果 split_length 参数超过了 string 超过了字符串 string 的长度,整个字符串将作为数组仅有的一个元素返回。

通过这个函数就可以将我们的字符串存入到数组中了。

& 和 && 的区别

& 符 大家经常使用,不过有些基础不牢的同学能会误用它。

一个&表示位运算,如果有运算 $a&$b,那么首先会将两个变量转换为2进制数,然后进行位于算。两个&&表示逻辑运算,首先判断&&左边是否为真,如果未假则不进行右边的运算,所以当我们进行 if判断是推荐大家使用&&。

php爬虫

顺利进入了新公司实习,被安排了一个网页爬虫的任务,从迷茫到成熟,让我收获了很多。因为工作太忙,导致博客延缓了更新,现在就跟大家分享一下最近的收获。

准备工作

1.PHP爬虫采用的是curl拓展,所以首先要确保你的PHP已经安装了curl拓展。查看是否已开启拓展可以

查看phpinfo页面找到curl拓展,查看是否开启。

如果没有开启,使用sudo apt-get install php5-curl 命令进行安装

工作原理

爬虫是指将目标网页保存到指定位置或变量中,使用正则表达式对其进行解析,以得到我们想要的数据。

将解析后的数据存入变量中并输出,完成爬虫。

函数说明

public function crawler_run()                       //爬取网页信息 参数为:返回网页内容存入变量

public function analysis($result)                 //分析爬取数据 参数为:网页内容

if (preg_match(“/正则表达式/”, $str, $matches))   PHP正则表达式使用函数  $str=’匹配字符’,$matches=’结果数组’。

 

public function crawler_run()    {

$url =”www.baidu.com”;//这里的URL可以随意换成你想要爬取的网站地址
$ch = curl_init($url);//curl初始化
curl_setopt($ch, CURLOPT_USERAGENT, “Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0)”);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($conn[$i],CURLOPT_COOKIE,$cookies);//如果需要登录则加入cookie
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);//设置连接的等待时间
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//禁止调用时就输出获取到的数据
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//// 跳过证书检查 (用来连接https类型的网页)
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//从证书中检查SSL加密算法是否存在(来连接https类型的网页)
$result = curl_exec($ch);//返回的结果就是爬取的网页,你可以把它保存到本地或者直接打印输出,或者用于后续的分析。

Warning: strftime()处理

今天编写PHP程序遇到了如下警告

Warning: strftime(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone ‘UTC’ for now, but please set date.timezone to select your timezone. inF:\local\smarty\s\sysplugins\smarty_internal_runtime_codeframe.php on line 44

想起来没有设置正确的时区,遇到相同问题的朋友可以通过如下的命令进行解决。

date_default_timezone_set(‘PRC’);

关于PHP7.0部分不支持TP的解决方法

不少朋友在使用了php7.0之后,发现TP的验证码用不了
提示如下Fatal error: Cannot use ‘String’ as class name as it is reserved in /data/webData/test/ThinkPHP/Library/Org/Util/String.class.php on line 12

复制代码打开文件一看是这里的问题
  1. namespace Org\Util;
  2. class String 
  3. Cannot use ‘String’ as type name as it is reserved (since PHP7)
有没有最快的修复方案呢?当然当然是有的。

在zend studio 13.1(已经支持php7开发)里导入3.2.3就会报这个错误。解决办法是在zend studio里的项目-》属性里,依次打开php->Semantic Analysis,在打开的设置页面中勾选”启用特定于项目的设置”,将Reserved types(since php7)和Multiple default cases in a switch(since php7)两项调整为Warning或Ignore)即可,但记得运行环境只能在php7以下版本。

PHP上传文件限制与验证(防病毒)

通常我们在网站建设中会给用户一些上传文件的权限,比如上传图片之类,但是有时候黑客也会利用这个漏洞上传病毒文件,这时候我们可以使用简单的设置来约束上传文件的类型。

处理方法:

$allowExt=array(“gif”,”jepg”,”png”,”wbmp”);

if($error==UPLOAD_ERR_OK){
if(!in_array($ext,$allowExt)){
exit(“非法文件类型”);
}
但是仅仅这样是不够的,因为黑客可以通过修改病毒文件的后缀名进行上传,这时我们就需要设置一个图片文件验证函数。

$imgFlag=true;

if($imgFlag){
//如何验证图片是否是一个真正的图片类型
//防止病毒上传
//getimagesize($filename):验证文件是否是图片类型
$info=getimagesize($tmp_name);
if(!$info){
exit(“不是一个真正的文件类型”);
}
}

完成了上述操作我们就可高枕无忧了。

PHP错误提示(Strict Standards: Only variables should be passed by referen)

今天在PHP项目编写过称中遇到了Only variables should be passed by referen这一报错,在检查一边之后发现原来错误是出在了end函数的使用上。

如果在使用end()时出现这个错误,那么原因可能是参数的问题,让我们找到手册中的end()函数API,如图所示;可以看到end的参数是一个引用(reference),如果把一个变量的引用作为一个参数传给函数,是没有任何问题的,但是如果把一个变量的分割表达式直接作为参数传给end()函数,就会出现这个错误;

处理方法:

<1>$temp = explode(‘,’, $example);

return end($temp);

先将需要分割的变量分割成数组,保存到一个临时变量中,然后使用end()函数

<2>更改错误配置:

error_reporting(E_ALL ^ E_NOTICE);

部分朋友在安装使用Ecshop的时候,可能也会报出上述错误,解决方案同上。

关于PHP的一些常规错误

在PHP编程中,大家经常会犯一些小错误,看似没什么影响但是在实际运行中会导致整个程序无法正常使用,接下来我就根据自己的经验来为大家总结一下新手PHP编程中常犯的小问题。

1.变量名忘记加”$”符号。如果没有”$”符号,变量就无法正常赋值,更不用说正常使用了。

2.mysql语句错误,在我们封装mysql语句之后,在外部文件对其进行调用。会遇到方法调用失败的情况,我们通常会查看方法是否写错,殊不知问题可能就出现在封装的原语句中。

避免这种错误的方法就是在封装好sql语句之前,将每一个sql语句echo一下,也就是输出一下,并检查。这样就能确保sql语句的正确性。少加一个空格,少一个$符号,少一个引号等之类的小错误,再常见不过。

上述是针对新手的一些建议,希望更多的朋友来一起交流。