标签归档:php

php怎么把gbk编码转成utf8

php怎么把gbk编码转成utf8

<?php

@header(“Content-
type:text/html;charset=GB2312”);echo $str= ‘你好,这里是卖咖啡!’;echo ‘<br />’;echo iconv(‘GB2312’, ‘UTF-8’, $str);
//将字符串的编码从GB2312转到UTF-8echo ‘<br />’;echo iconv_substr($str, 1, 1, ‘GB2312’); //按字符个数截取而非字节
print_r(iconv_get_encoding()); //得到当前页面编码信息echo iconv_strlen($str, ‘GB2312’); //得到设定编码的字符串长
度?>

注意:确保U

php怎样把utf8转换为gbk<?php@header(“Content-type:text/html;charset=UTF-8”);echo $str= ‘你好,这里是卖咖啡!’;echo
‘<br />’;echo iconv(“UTF-8″,”gbk//TRANSLIT”,$str);; //将字符串的编码从UTF-8转到GB2312

echo ‘<br />’;echo
iconv_substr($str, 1, 1, ‘UTF-8’); //按字符个数截取而非字节print_r(iconv_get_encoding()); //得到当前页面编码信息
echo iconv_strlen($str, ‘UTF-8’); //得到设定编码的字符串长度?>

如果是gbk转换为utf8

nicode编码跟文本编码一样,运行是才不会出现错误

让你的 PHP 7 更快 (GCC PGO)

我们一直致力于提升PHP7的性能,  上个月我们注意到GCC的PGO能在Wordpress上能带来近10%的性能提升,  这个让我们很激动.

然而,  PGO正如名字所说(Profile Guided Optimization 有兴趣的可以Google), 他需要用一些用例来获得反馈, 也就是说这个优化是需要和一个特定的场景绑定的.

你对一个场景的优化, 也许在另外一个场景就事与愿违了.  它不是一个通用的优化. 所以我们不能简单的就包含这些优化, 也无法直接发布PGO编译后的PHP7.

当然, 我们正在尝试从PGO找出一些共性的优化,  然后手工Apply到PHP7上去, 但这个很明显不能做到针对一个场景的特别优化所能达到的效果,  所以我决定写这篇文章简单介绍下怎么使用PGO来编译PHP7, 让你编译的PHP7能特别的让你自己的独立的应用变得更快.

首先,  要决定的就是拿什么场景去Feedback GCC,  我们一般都会选择: 在你要优化的场景中: 访问量最大的, 耗时最多的, 资源消耗最重的一个页面.

拿Wordpress为例,  我们选择Wordpress的首页(因为首页往往是访问量最大的).

我们以我的机器为例:

1
2
Intel(R) Xeon(R) CPU           X5687  @ 3.60GHz X 16(超线程),
48G Memory

php-fpm 采用固定32个worker, opcache采用默认的配置(一定要记得加载opcache)

以wordpress 4.1为优化场景..

首先我们来测试下目前WP在PHP7的性能(ab -n 10000 -c 100):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
$ ab -n 10000 -c 100 http://inf-dev-maybach.weibo.com:8000/wordpress/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
 
Benchmarking inf-dev-maybach.weibo.com (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests
 
Server Software:        nginx/1.7.12
Server Hostname:        inf-dev-maybach.weibo.com
Server Port:            8000
 
Document Path:          /wordpress/
Document Length:        9048 bytes
 
Concurrency Level:      100
Time taken for tests:   8.957 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      92860000 bytes
HTML transferred:       90480000 bytes
Requests per second:    1116.48 [#/sec] (mean)
Time per request:       89.567 [ms] (mean)
Time per request:       0.896 [ms] (mean, across all concurrent requests)
Transfer rate:          10124.65 [Kbytes/sec] received

可见Wordpress 4.1 目前在这个机器上, 首页的QPS可以到1116.48. 也就是每秒钟可以处理这么多个对首页的请求,

现在, 让我们开始教GCC, 让他编译出跑Wordpress4.1更快的PHP7来,  首先要求GCC 4.0以上的版本, 不过我建议大家使用GCC-4.8以上的版本(现在都GCC-5.1了).

第一步, 自然是下载PHP7的源代码了,  然后做./configure. 这些都没什么区别

接下来就是有区别的地方了, 我们要首先第一遍编译PHP7, 让它生成会产生profile数据的可执行文件:

1
make prof-gen

注意, 我们用到了prof-gen参数(这个是PHP7的Makefile特有的, 不要尝试在其他项目上也这么搞哈 :) )

然后, 让我们开始训练GCC:

1
$ sapi/cgi/php-cgi -T 100 /home/huixinchen/local/www/htdocs/wordpress/index.php >/dev/null

也就是让php-cgi跑100遍wordpress的首页, 从而生成一些在这个过程中的profile信息.

然后, 我们开始第二次编译PHP7.

1
2
make prof-clean
make prof-use && make install

好的, 就这么简单,  PGO编译完成了,  现在我们看看PGO编译以后的PHP7的性能:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
$ ab -n10000 -c 100 http://inf-dev-maybach.weibo.com:8000/wordpress/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
 
Benchmarking inf-dev-maybach.weibo.com (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests
 
Server Software:        nginx/1.7.12
Server Hostname:        inf-dev-maybach.weibo.com
Server Port:            8000
 
Document Path:          /wordpress/
Document Length:        9048 bytes
 
Concurrency Level:      100
Time taken for tests:   8.391 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      92860000 bytes
HTML transferred:       90480000 bytes
Requests per second:    1191.78 [#/sec] (mean)
Time per request:       83.908 [ms] (mean)
Time per request:       0.839 [ms] (mean, across all concurrent requests)
Transfer rate:          10807.45 [Kbytes/sec] received

现在每秒钟可以处理1191.78个QPS了,  提升是~7%.  还不赖哈(咦, 你不是说10%么? 怎么成7%了?  呵呵, 正如我之前说过, 我们尝试分析PGO都做了些什么优化, 然后把一些通用的优化手工Apply到PHP7中. 所以也就是说, 那~3%的比较通用的优化已经包含到了PHP7里面了, 当然这个工作还在继续).

于是就这么简单, 大家可以用自己的产品的经典场景来训练GCC, 简单几步, 获得提升, 何乐而不为呢

php中常见的字符串函数很有必要学会的哦

字符串函数

更多强大的字符串处理函数,参见 POSIX 正则表达式函数和 Perl 兼容正则表达式函数。

Table of Contents
addcslashes — 以 C 语言风格使用反斜线转义字符串中的字符
addslashes — 使用反斜线引用字符串
bin2hex — 将二进制数据转换成十六进制表示
chop — rtrim 的别名
chr — 返回指定的字符
chunk_split — 将字符串分割成小块
convert_cyr_string — 将字符由一种 Cyrillic 字符转换成另一种
convert_uudecode — 解码一个 uuencode 编码的字符串
convert_uuencode — 使用 uuencode 编码一个字符串
count_chars — 返回字符串所用字符的信息
crc32 — 计算一个字符串的 crc32 多项式
crypt — 单向字符串散列
echo — 输出一个或多个字符串
explode — 使用一个字符串分割另一个字符串
fprintf — 将格式化后的字符串写入到流
get_html_translation_table — 返回使用 htmlspecialchars 和 htmlentities 后的转换表
hebrev — 将逻辑顺序希伯来文(logical-Hebrew)转换为视觉顺序希伯来文(visual-Hebrew)
hebrevc — 将逻辑顺序希伯来文(logical-Hebrew)转换为视觉顺序希伯来文(visual-Hebrew),并且转换换行符
hex2bin — Decodes a hexadecimally encoded binary string
html_entity_decode — Convert all HTML entities to their applicable characters
htmlentities — Convert all applicable characters to HTML entities
htmlspecialchars_decode — Convert special HTML entities back to characters
htmlspecialchars — Convert special characters to HTML entities
implode — Join array elements with a string
join — 别名 implode
lcfirst — Make a string’s first character lowercase
levenshtein — Calculate Levenshtein distance between two strings
localeconv — Get numeric formatting information
ltrim — Strip whitespace (or other characters) from the beginning of a string
md5_file — 计算指定文件的 MD5 散列值
md5 — 计算字符串的 MD5 散列值
metaphone — Calculate the metaphone key of a string
money_format — Formats a number as a currency string
nl_langinfo — Query language and locale information
nl2br — 在字符串所有新行之前插入 HTML 换行标记
number_format — Format a number with grouped thousands
ord — 返回字符的 ASCII 码值
parse_str — Parses the string into variables
print — 输出字符串
printf — 输出格式化字符串
quoted_printable_decode — Convert a quoted-printable string to an 8 bit string
quoted_printable_encode — Convert a 8 bit string to a quoted-printable string
quotemeta — Quote meta characters
rtrim — 删除字符串末端的空白字符(或者其他字符)
setlocale — Set locale information
sha1_file — 计算文件的 sha1 散列值
sha1 — 计算字符串的 sha1 散列值
similar_text — 计算两个字符串的相似度
soundex — Calculate the soundex key of a string
sprintf — Return a formatted string
sscanf — Parses input from a string according to a format
str_getcsv — 解析 CSV 字符串为一个数组
str_ireplace — str_replace 的忽略大小写版本
str_pad — 使用另一个字符串填充字符串为指定长度
str_repeat — 重复一个字符串
str_replace — 子字符串替换
str_rot13 — 对字符串执行 ROT13 转换
str_shuffle — 随机打乱一个字符串
str_split — 将字符串转换为数组
str_word_count — 返回字符串中单词的使用情况
strcasecmp — 二进制安全比较字符串(不区分大小写)
strchr — 别名 strstr
strcmp — 二进制安全字符串比较
strcoll — 基于区域设置的字符串比较
strcspn — 获取不匹配遮罩的起始子字符串的长度
strip_tags — 从字符串中去除 HTML 和 PHP 标记
stripcslashes — 反引用一个使用 addcslashes 转义的字符串
stripos — 查找字符串首次出现的位置(不区分大小写)
stripslashes — 反引用一个引用字符串
stristr — strstr 函数的忽略大小写版本
strlen — 获取字符串长度
strnatcasecmp — 使用“自然顺序”算法比较字符串(不区分大小写)
strnatcmp — 使用自然排序算法比较字符串
strncasecmp — 二进制安全比较字符串开头的若干个字符(不区分大小写)
strncmp — 二进制安全比较字符串开头的若干个字符
strpbrk — 在字符串中查找一组字符的任何一个字符
strpos — 查找字符串首次出现的位置
strrchr — 查找指定字符在字符串中的最后一次出现
strrev — 反转字符串
strripos — 计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写)
strrpos — 计算指定字符串在目标字符串中最后一次出现的位置
strspn — 计算字符串中全部字符都存在于指定字符集合中的第一段子串的长度。
strstr — 查找字符串的首次出现
strtok — 标记分割字符串
strtolower — 将字符串转化为小写
strtoupper — 将字符串转化为大写
strtr — 转换指定字符
substr_compare — 二进制安全比较字符串(从偏移位置比较指定长度)
substr_count — 计算字串出现的次数
substr_replace — 替换字符串的子串
substr — 返回字符串的子串
trim — 去除字符串首尾处的空白字符(或者其他字符)
ucfirst — 将字符串的首字母转换为大写
ucwords — 将字符串中每个单词的首字母转换为大写
vfprintf — 将格式化字符串写入流
vprintf — 输出格式化字符串
vsprintf — 返回格式化字符串
wordwrap — 打断字符串为指定数量的字串

php安全模式下 限制的函数

php安全模式下 限制的函数

函数名

限制
dbmopen() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。
dbase_open() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。
filepro() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。
filepro_rowcount() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。
filepro_retrieve() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。
ifx_* sql_safe_mode 限制, (!= safe mode)
ingres_* sql_safe_mode 限制, (!= safe mode)
mysql_* sql_safe_mode 限制, (!= safe mode)
pg_loimport() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。
posix_mkfifo() 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。
putenv() 遵循 ini 设置的 safe_mode_protected_env_vars 和 safe_mode_allowed_env_vars 选项。请参考 putenv() 函数的有关文档。
move_uploaded_file() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。
chdir() 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。
dl() 当 PHP 运行在 安全模式 时,不能使用此函数。
backtick operator 当 PHP 运行在 安全模式 时,不能使用此函数。
shell_exec()(在功能上和 backticks 函数相同) 当 PHP 运行在 安全模式 时,不能使用此函数。
exec() 只能在 safe_mode_exec_dir 设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用 ..。escapeshellcmd() 将被作用于此函数的参数上。
system() 只能在 safe_mode_exec_dir 设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用 ..。escapeshellcmd() 将被作用于此函数的参数上。
passthru() 只能在 safe_mode_exec_dir 设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用 ..。escapeshellcmd() 将被作用于此函数的参数上。
popen() 只能在 safe_mode_exec_dir 设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用 ..。escapeshellcmd() 将被作用于此函数的参数上。
fopen() 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。
mkdir() 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。
rmdir() 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。
rename() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。
unlink() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。
copy() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。 (on source and target)
chgrp() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。
chown() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。
chmod() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 另外,不能设置 SUID、SGID 和 sticky bits
touch() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。
symlink() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。 (注意:仅测试 target)
link() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。 (注意:仅测试 target)
apache_request_headers() 在安全模式下,以“authorization”(区分大小写)开头的标头将不会被返回。
header() 在安全模式下,如果设置了 WWW-Authenticate,当前脚本的 uid 将被添加到该标头的 realm 部分。
PHP_AUTH 变量 在安全模式下,变量 PHP_AUTH_USER、PHP_AUTH_PW 和 PHP_AUTH_TYPE 在 $_SERVER 中不可用。但无论如何,您仍然可以使用 REMOTE_USER 来获取用户名称(USER)。(注意:仅 PHP 4.3.0 以后有效)
highlight_file(), show_source() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。 (注意,仅在 4.2.1 版本后有效)
parse_ini_file() 检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。 (注意,仅在 4.2.1 版本后有效)
set_time_limit() 在安全模式下不起作用。
max_execution_time 在安全模式下不起作用。
mail() 在安全模式下,第五个参数被屏蔽。(注意,仅自 PHP 4.2.3 起受影响)
任何使用 php4/main/fopen_wrappers.c 的函数

php数组的常用函数

php数组的常用函数

在php中数组是种强大的数据类型.可以存储不同的数据类型在一个数组中,

下面我们列出了数组常用的操作,排序,键名对数组排序等做法。

/* 数组的常用函数
*
* 数组的排序函数
*   sort()
*   rsort()
*   usort()
*   asort()
*   arsort()
*   uasort()
*   ksort()
*   krsort()
*   uksort()
*   uatsort()
*   natcasesort()
*   array_multisort()
*
*    1.简单的数组排序
*      sort() rsort()
*    2.根据键名对数组排序
*      ksort() krsort()
*    3.根据元素的值对数组排序
*      asort() arsort()
*    4.根据”自然数排序“法对数组排序
*      natsort()//区分大小写字母比较 natcasescort()//不区分大小写字母的比较
*    5.根据用户自定义规则对数组排序
*      usort() uasort() uksort()对键排序
*    6.对维数组的排序
*      array_multisort()
*
* 拆分、合并、分解、接合的数组函数
*    1.array_slice()
*    2.array_splice()//删除
*    3.array_combine()//合并
*    4.array_merge();//合并
*    5.array_intersect();//多个数组的交集
*    6.array_diff();//返回多个数组的差集
*
* 数组与数据结构的函数
*   1.使用数组实现堆栈 //先进后出
*    array_push() array_pop()
*   2.使用数组实现队列 //先进先出
*    array_unshift() array_shift() unset()
*
*
* 其他与数组操作有关的函数
*    array_rand()
*    shuffle()
*    array_sum()
*    range()
*/

//简单数组排序的使用
$data=array(5,8,1,7,2);
sort($data);//元素由小到大进行排序
print_r($data);//Array ( [0] => 1 [1] => 2 [2] => 5 [3] => 7 [4] => 8 )
rsort($data);//元素由大到小进行排序
print_r($data);//Array ( [0] => 8 [1] => 7 [2] => 5 [3] => 2 [4] => 1 )

//根据键名排序的例子
$data_2=array(5=>”five”,8=>”eight”,1=>”one”,7=>”seven”,2=>”two”);
ksort($data_2);//对数组的下标进行由小到大排序
print_r($data_2);//Array ( [1] => one [2] => two [5] => five [7] => seven [8] => eight )
krsort($data_2);//对数组的下标进行由大到小排序
print_r($data_2);//Array ( [8] => eight [7] => seven [5] => five [2] => two [1] => one )

 

//根据元素的值对数组排序
$data_3=array(“1″=>”Linux”,”a”=>”Apache”,”m”=>”MySQL”,”l”=>”PHP”);
//asort() arsort  与 sort() rsort()的区别在于 前者排序后保持原有的键名,后者不保持原有键名,且键名从0开始
asort($data_3);
print_r($data_3);//Array ( [a] => Apache [1] => Linux [m] => MySQL [l] => PHP )
echo ‘
‘;
arsort($data_3);
print_r($data_3);//Array ( [l] => PHP [m] => MySQL [1] => Linux [a] => Apache )
echo ‘
‘;
sort($data_3);
print_r($data_3);//Array ( [0] => Apache [1] => Linux [2] => MySQL [3] => PHP )
echo ‘
‘;
rsort($data_3);
print_r($data_3);//Array ( [0] => PHP [1] => MySQL [2] => Linux [3] => Apache )

//根据”自然数排序法“对数组排序(0-9短者优先)
$data_4=array(“file.txt”,”file11.txt”,”file2.txt”,”file22.txt”);
sort($data_4);
print_r($data_4);//Array ( [0] => file.txt [1] => file11.txt [2] => file2.txt [3] => file22.txt )
echo ‘
‘;
natsort($data_4);
print_r($data_4);//Array ( [0] => file.txt [2] => file2.txt [1] => file11.txt [3] => file22.txt )
echo ‘
‘;
natcasesort($data_4);
print_r($data_4);//Array ( [0] => file.txt [2] => file2.txt [1] => file11.txt [3] => file22.txt )
echo ‘
‘;

//用户自定义排序函数
echo ‘
‘;
$data_5=array(“Linux”,”Apache”,”MySQL”,”PHP”);
usort($data_5,”sortbylen”);//通过元素长度排序
print_r($data_5);//Array ( [0] => PHP [1] => MySQL [2] => Linux [3] => Apache )
function sortbylen($one,$two){
if(strlen($one)==strlen($two))
return 0;
else
return (strlen($one)>strlen($two))?1:-1;
}

//拆分、合并、分解、接合的数组函数
echo ‘
‘;
$data_6=array(“Linux”,”Apache”,”MySQL”,”PHP”);
print_r(array_slice($data_6,1,2));//取下标为1、2的元素
//Array ( [0] => Apache [1] => MySQL ) 下标重置从0开始
echo ‘
‘;

print_r(array_slice($data_6,-2,1));//从后边的第二个开始取返回一个,不是从0开始的
//Array ( [0] => MySQL ) 下标重置从0开始
echo ‘
‘;

print_r(array_slice($data_6,1,2,true));
//Array ( [1] => Apache [2] => MySQL )  保留原有的下标

echo ‘
‘;
//array_combine()
$a1=array(“OS”,”WebServer”,”DataBase”,”Language”);
$a2=array(“Linux”,”Apache”,”MySQL”,”PHP”);

print_r(array_combine($a1,$a2));//第一个参数作为键名,第二个作为值来合并
//Array ( [OS] => Linux [WebServer] => Apache [DataBase] => MySQL [Language] => PHP )

echo ‘
‘;

//array_merge()
$a3=array(“OS”,”WebServer”,”DataBase”,”Language”);
$a4=array(“Linux”,”Apache”,”MySQL”,”PHP”);
$a5=$a3+$a4;
print_r($a5);//因为两个数组下标重复所以显示这样
//Array ( [0] => OS [1] => WebServer [2] => DataBase [3] => Language )
echo ‘
‘;
print_r(array_merge($a3,$a4));//合并并重新索引
//Array ( [0] => OS [1] => WebServer [2] => DataBase [3] => Language [4] => Linux [5] => Apache [6] => MySQL [7] => PHP )

echo ‘
‘;

//array_intersect()
$a7=array(“OS”,”WebServer”,”DataBase”,”Language”,1,2,3);
$a8=array(“Linux”,”Apache”,”MySQL”,”PHP”,2,3,4);
print_r(array_intersect($a7,$a8));//Array ( [5] => 2 [6] => 3 )
echo ‘
‘;

//array_diff()
$a9=array(1,2,3,4);
$a10=array(3,4,5,6);
print_r(array_diff($a9,$a10));//Array ( [0] => 1 [1] => 2 )
//返回第一个数组跟第二个相差的元素
echo ‘
‘;
//使用数组实现堆栈
$b=array(1,2,3,4);
$b[]=”a”;//入栈
array_push($b,”b”,”c”);//使用函数入栈
print_r($b);//Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => a [5] => b [6] => c )
echo ‘
‘;

$value=array_pop($b);//使用函数出栈
print_r($b);//Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => a [5] => b )
echo ‘
‘;
echo $value;//显示出栈的元素的值 c
echo ‘
‘;

//使用数组实现队列
$c=array(1,2,3);
print_r($c);//Array ( [0] => 1 [1] => 2 [2] => 3 )
echo ‘
‘;
array_unshift($c,”abc”,”bcd”);//入队
print_r($c);//Array ( [0] => abc [1] => bcd [2] => 1 [3] => 2 [4] => 3 )
echo ‘
‘;
$values=array_shift($c);//出队
print_r($c);// Array ( [0] => bcd [1] => 1 [2] => 2 [3] => 3 )
echo ‘
‘;
unset($c[2]);//删除指定位置元素
print_r($c);//Array ( [0] => bcd [1] => 1 [3] => 3 )
echo ‘
‘;
//array_rand()  随机返回数组下标
$arr=array(1,3,4,5,76,7,99,6,2,3);
echo array_rand($arr);//返回的是随机的数组元素的下标
echo $arr[array_rand($arr)];//随机显示数组元素的值
echo ‘
‘;
//shuffle()  随机重新排列数组
$arr2=array(32,35,33);
shuffle($arr2);
print_r($arr2);//数组元素位置随机变换
echo ‘
‘;
//array_sum()  求和
$arr3=array(1,3,5);
echo array_sum($arr3); //返回9
echo ‘
‘;
print_r($arr3);//Array ( [0] => 1 [1] => 3 [2] => 5 )
echo ‘
‘;
//range(最小值,最大值,步长)
$arr4=range(0,100,10);
print_r($arr4);//Array ( [0] => 0 [1] => 10 [2] => 20 [3] => 30 [4] => 40 [5] => 50 [6] => 60 [7] => 70 [8] => 80 [9] => 90 [10] => 100 )

?>

php中的短标签和长标签有什么区别么?

<? ?>是短标签
<?php ?>是长标签
在php的配置文件(php.ini)中有一个short_open_tag的值,开启以后可以使用PHP的短标签:<? ?>
同时,只有开启这个才可以使用 <?= 以代替 <? echo 。在CodeIgniter的视频教程中就是用的这种方式。
但是这个短标签是不推荐的,使用<?php ?>才是规范的方法。只是因为这种短标签使用的时间比较长,这种特性才被保存了下来。
其中<? ?>短标签不推荐使用。一般比较常用的是 <?php ?>这种。而且后面的?>可以省略。写成<?php 就可以了

php不能信任的用户输入.安全处理用户输入

在编程世界中不能信任用户输入

 

变量 $a直接来自表单 POST。用户可以在这个输入域中输入任何字符串,包括用来清除文件或运行以前上传的文件的恶意命令。您可能会问,“难道不能使用只接受字母 A-Z 的客户端(Javascrīpt)表单检验脚本来避免这种危险吗?”是的,这总是一个有好处的步骤,但是正如在后面会看到的,任何人都可以将任何表单下载 到自己的机器上,修改它,然后重新提交他们需要的任何内容。
解决方案很简单:必须对 $_POST[‘username’] 运行清理代码。如果不这么做,那么在使用 $a 的任何其他时候(比如在数组或常量中),就可能污染这些对象。
对用户输入进行清理的一个简单方法是,使用正则表达式来处理它。在这个示例中,只希望接受字母。将字符串限制为特定数量的字符,或者要求所有字母都是小写的,这可能也是个好主意。
使用户输入变得安全

已经知道了不能信任用户输入,还应该知道不应该信任机器上配置 PHP 的方式。例如,要确保禁用 register_globals。如果启用了 register_globals,就可能做一些粗心的事情,比如使用 $variable 替换同名的 GET 或 POST 字符串。通过禁用这个设置,PHP 强迫您在正确的名称空间中引用正确的变量。要使用来自表单 POST 的变量,应该引用 $_POST[‘variable’]。这样就不会将这个特定变量误会成 cookie、会话或 GET 变量。

一些开发人员使用奇怪的语法,或者将语句组织得很紧凑,形成简短但是含义模糊的代码。这种方式可能效率高,但是如果您不理解代码正在做什么,那么就无法决定如何保护它。
例如,您喜欢下面两段代码中的哪一段?
使代码容易得到保护

 

还有mysql中sql 语句怎么处理呢 请关注mysql防注入

 

php常用的文本编辑软件

第一款sublime编辑软件 下载地址  http://rj.baidu.com/soft/detail/15554.html?ald

第二款editplus  这款软件很不错的呢 下载地址 http://rj.baidu.com/soft/detail/12876.html?ald

 

还有一些IDE(Integrated Development Environment,集成开发环境)

zend studio 这款ide是php官方   下载地址  http://rj.baidu.com/soft/detail/15423.html?ald

Eclipse   这款ide现在很流行呢  下载地址   http://www.eclipse.org/downloads/

phpstorm  也不错的ide