标签归档:php

linux php报the server responded with a status of 500 (Internal Server Error)

当你发现chrome浏览器console里面报错: Failed to load resource: the server responded with a status of 500 (Internal Server Error)     http://xbphp.nmfox.com//Index/article/7.html
其实这个报错是并不是指是代码错误,而是指路径错误.
这种报错其实就你URL从某个页面点击超链接进来才会出现..如果是直接访问就不会出现该错误,那到底是为什么呢?
你可以通过抓包来看一下HTTP状态,你就会发现:
你从某个页面点击进去的时候,这个HTTP请求的状态码500,但是实际页面并没影响而是可以正常访问
你直接从连接访问进去,这个HTTP请求的状态码200
这时候你就会哭笑不得,代码没错,服务器配置检查也没问题,但是为什么还有这个错误,其实一切源头在于linux系统,而win系统完全不会报错,为啥,因为URL路径出现了双斜杠导致….其实linux的路径检验特别严格..

centos7安装lnmp/nginx1.95 php7 mariadb10 2015最新教程

nginx1.95的安装

php7的安装

mariadb20的安装

如果都安装好后下面来整合

 

——————————————

systemctl 管理systemd启动

systemd启动nginx的安装

http://www.nmfox.com/2015/10/30/448.html

systemd启动php7的安装

http://www.nmfox.com/2015/11/04/468.html

systemd启动mariadb20 二进制的安装

http://www.nmfox.com/2015/11/10/479.html

 

linux-centos7中安装php7-0.0.0用最新管理systemctl控制启动关闭

linux之centos7中安装php7 后面有systemctl管理文件php-fpm.service

安装gcc gcc-c++ wget

.安装一些库

 

wget PHP7的下载地址

下载后解压进入目录

# 配置参数

 

编译

安装

复制php.ini

复制php-fpm.conf

复制php-fpm下的conf

然后在php.ini中加入opcache

把php.ini中的这两expose_php版本号关掉

 

编辑 /php-fpm.conf

pid=/run/php-fpm.pid

然后把php-fpm加入systemd中

 

写入以下内容下面为systemctl管理php-fpm启动文件

然后开启php-fpm用来管理php

加到开机自启动

 

 

 

linux-centos7中安装php7-0.0.0教程

linux、centos7中安装php7

安装gcc gcc-c++ wget

 

.安装一些库

 

———————————————
下载PHP7下面为PHP7的下载地址

# 下载后解压进入目录

# 配置参数

 

编译

安装

 

配置安装好的php

复php-fpm

更改php7-fpm权限

复php-fpm.conf

复php-fpm下的conf

然后在php.ini中加入opcache

 

# 启动

 

# 查看PHP版本

/usr/local/php7/bin/php -v
为了安全最好是去掉头信息  X-Powered-By: PHP/7.*.*
则修改 php.ini 文件 设置 expose_php = Off

vim /usr/local/php7/etc/php.ini
找到 expose_php = On
改为 expose_php = Off

php7配置帮助文档

 

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工厂模式的介绍与使用

工厂模式:

由工厂类根据参数来决定创建出哪一种产品类的实例;

工厂类是指包含了一个专门用来创建其他对象的方法的类。所谓按需分配,传入参数进行选择,返回具体的类。工厂模式的最主要作用就是对象创建的封装、简化创建对象操作。

简单的说,就是调用工厂类的一个方法(传入参数)来得到需要的类;

代码实现

示例1(最基本的工厂类):

<?php

 

class MyObject {

 

public function __construct(){}

 

public function test(){

return ‘测试’;

}

 

}

 

class MyFactory {

 

public static function factory(){

//返回对象的实例

return new MyObject();

}

 

}

 

//调用工厂类MyFactory中的静态方法,获取类MyObject的实例

$myobject=MyFactory::factory();

echo $myobject->test();

 

示例2

<?php

//简单工厂模式

/1*

* 定义运算类

*/

abstract class Operation {

 

protected $_NumberA = 0;

protected $_NumberB = 0;

protected $_Result  = 0;

 

public function __construct($A,$B){

$this->_NumberA = $A;

$this->_NumberB = $B;

}

 

public function setNumber($A,$B){

$this->_NumberA = $A;

$this->_NumberB = $B;

}

 

/1*

protected function clearResult(){

$this->_Result  = 0;

}

*/

 

public function clearResult(){

$this->_Result  = 0;

}

 

//抽象方法无方法体

abstract protected function getResult();

 

}

 

//继承一个抽象类的时候,子类必须实现抽象类中的所有抽象方法;

//另外,这些方法的可见性 必须和抽象类中一样(或者更为宽松)

class OperationAdd extends Operation {

 

public function getResult(){

$this->_Result=$this->_NumberA + $this->_NumberB;

return $this->_Result;

}

 

}

 

class OperationSub extends Operation {

 

public function getResult(){

$this->_Result=$this->_NumberA – $this->_NumberB;

return $this->_Result;

}

 

}

 

class OperationMul extends Operation {

 

public function getResult(){

$this->_Result=$this->_NumberA * $this->_NumberB;

return $this->_Result;

}

 

}

 

class OperationDiv extends Operation {

 

public function getResult(){

$this->_Result=$this->_NumberA / $this->_NumberB;

return $this->_Result;

}

 

}

 

class OperationFactory {

 

//创建保存实例的静态成员变量

private static $obj;

 

//创建访问实例的公共的静态方法

public static function CreateOperation($type,$A,$B){

switch($type){

case ‘+’:

self::$obj = new OperationAdd($A,$B);

break;

case ‘-‘:

self::$obj = new OperationSub($A,$B);

break;

case ‘*’:

self::$obj = new OperationMul($A,$B);

break;

case ‘/’:

self::$obj = new OperationDiv($A,$B);

break;

}

return self::$obj;

}

 

}

 

//$obj = OperationFactory::CreateOperation(‘+’);

//$obj->setNumber(4,4);

$obj = OperationFactory::CreateOperation(‘*’,5,6);

echo $obj->getResult();

/1*

echo ‘<br>’;

$obj->clearResult();

echo ‘<br>’;

echo $obj->_Result;

*/

 

示例3:

<?php

//抽象工厂

 

//青铜会员的打折商品

class BronzeRebateCommodity {

//描述

public $desc = ‘青铜会员的打折商品’;

}

 

//白银会员的打折商品

class SilverRebateCommodity {

public $desc = ‘白银会员的打折商品’;

}

 

//青铜会员的推荐商品

class BronzeCommendatoryCommodity {

public $desc = ‘青铜会员的推荐商品’;

}

 

//白银会员的推荐商品

class SilverCommendatoryCommodity {

public $desc = ‘白银会员的推荐商品’;

}

 

//各个工厂的接口

interface ConcreteFactory {

//生产对象的方法

public function create($what);

}

 

//青铜工厂

class BronzeFactory implements ConcreteFactory {

 

//生产对象的方法

public function create($what){

$productName = ‘Bronze’.$what.’Commodity’;

return new $productName;

}

 

}

 

//白银工厂

class SilverFactory implements ConcreteFactory {

 

//生产对象的方法

public function create($what){

$productName = ‘Silver’.$what.’Commodity’;

return new $productName;

}

 

}

 

//调度中心

class CenterFactory {

 

//获取工厂的方法

public function getFactory($what){

$factoryName = $what.’Factory’;

return new $factoryName;

}

 

//获取工厂的静态方法

public static function getFactory2($what){

$factoryName = $what.’Factory’;

return new $factoryName;

}

 

}

 

//实例化调度中心

$center  = new CenterFactory();

//获得一个白银工厂

$factory = $center->getFactory(‘Silver’);

//让白银工厂制造一个推荐商品

$product = $factory->create(‘Commendatory’);

//得到白银会员的推荐商品

echo $product->desc.'<br>’;

 

//获得一个青铜工厂

$factory2 = CenterFactory::getFactory2(‘Bronze’);

//让青铜工厂制造一个打折商品

$product2 = $factory2->create(‘Rebate’);

//得到青铜会员的推荐商品

echo $product2->desc;

 

示例4:

<?php

//使用工厂类解析图像文件

interface IImage {

 

function getWidth();

function getHeight();

function getData();

 

}

 

class Image_PNG implements IImage {

 

protected $_width,$_height,$_data;

 

public function __construct($file){

$this->_file = $file;

$this->_parse();

}

 

private function _parse(){

//完成PNG格式的解析工作

//并填充$_width,$_height和$_data

$this->_data   = getimagesize($this->_file);

list($this->_width,$this->_height)=$this->_data;

}

 

public function getWidth(){

return $this->_width;

}

 

public function getHeight(){

return $this->_height;

}

 

public function getData(){

return $this->_data;

}

 

}

 

class Image_JPEG implements IImage {

 

protected $_width,$_height,$_data;

 

public function __construct($file){

$this->_file = $file;

$this->_parse();

}

 

private function _parse(){

//完成JPEG格式的解析工作

//并填充$_width,$_height和$_data

//$this->_width  = imagesx($this->_file);

//$this->_height = imagesy($this->_file);

$this->_data   = getimagesize($this->_file);

list($this->_width,$this->_height)=$this->_data;

}

 

public function getWidth(){

return $this->_width;

}

 

public function getHeight(){

return $this->_height;

}

 

public function getData(){

return $this->_data;

}

 

}

 

//工厂类

class ImageFactory {

 

public static function factory($file){

 

$filename = pathinfo($file);

switch(strtolower($filename[‘extension’])){

case ‘jpg’:

$return = new Image_JPEG($file);

break;

case ‘png’:

$return = new Image_PNG($file);

break;

default:

echo ‘图片类型不正确’;

break;

}

if($return instanceof IImage){

return $return;

}else{

echo ‘出错了’;

exit();

}

 

}

 

}

 

$image = ImageFactory::factory(‘images/11.jpg’);

var_dump($image->getWidth());

echo ‘<br>’;

print_r($image->getheight());

echo ‘<br>’;

print_r($image->getData());

spl_autoload_register()函数的使用与介绍、跟__autoload()有什么区别

__autoload()函数spl_autoload_register()函数都是用来自动加载的有什么区别呢?

第一个index.php

加载test1.php
加载test2.php

下面看下test1.php

下面看下test2.php

修改include为自动加载 如果__autoload 函数加载两次会报致命错误

 

可以自动加载下面来试下spl_autoload_register()函数

spl_autoload_register()函数可以加载多次

PHP range()函数定义和用法

php中range()函数定义和用法

典型用法如下

例子:建立1-9的9个数字的数组(骰子)

$die = range(1,9);

建立0-100所有双数的数组

$even  = (0,100,2);//步长为2

这个函数不仅仅可以用作数字,还可以用作字母.

$words = range(‘A’,’Z’);

将建立包含A到Z的的所有字母的数组.此处可以用于生成验证码函数.

range() 函数创建并返回一个包含指定范围的元素的数组。

参数 描述
first 必需。规定数组元素的最小值。
second 必需。规定数组元素的最大值。
step 可选。规定元素之间的步进制。默认是 1。

注释:该参数是 PHP 5 中加入的。

输出:

例子 2

输出:

例子 3

输出:

php Curl post json数据

通常我们用curl post或者get 直接请求
有时也会用到 发送json数据的时候
这里给下代码