laravel openssl_cipher_iv_length()

laravel 错误

Call to undefined function Illuminate\Encryption\openssl_cipher_iv_length()

phpinfo()

OpenSSL support disabled (install ext/openssl)

下载https://windows.php.net/downloads/php-sdk/deps/vc15/x64/openssl-1.1.1a-vc15-x64.zip

解压后bin目录能看到libcrypto-1_1-x64.dll和libssl-1_1-x64.dll,两个文件都拷到php目录和apache的bin下

开启extension=openssl

重启Apache就好了

laravel获取微信Post xml

由于HTTP_RAW_POST_DATA这个特性在PHP5.6之后已经废弃,所以要或许xml数据可以考虑以下方案
1.由于PHP是兼容的,你可以在php.ini中修改配置,以获得此选项的支持
2.通过PHP的标准输入,php://input来获得数据,如file_get_content(“php://input”),fopen(“php://input”)
3.在laravel中,框架已经封装了一个方法在Request类中,使用$request->getContent()即可,在laravel的源码中可以看到,
getContent的实现就是通过fopen打开标准输入来进行数据的读取的

mysqli代替mysql

<?PHP 
$dbhost="127.0.0.1";
$dbport="3306";
$dbuser="root";
$dbpass="1234";
$dbname="menghaozi";
if(!function_exists('mysql_pconnect')){
    $mysqli = mysqli_connect("$dbhost:$dbport", $dbuser, $dbpass, $dbname);
    function mysql_pconnect($dbhost, $dbuser, $dbpass){
        global $dbport;
        global $dbname;
        global $mysqli;
        $mysqli = mysqli_connect("$dbhost:$dbport", $dbuser, $dbpass, $dbname);
        return $mysqli;
        }
    function mysql_select_db($dbname){
        global $mysqli;
        return mysqli_select_db($mysqli,$dbname);
        }
    function mysql_fetch_array($result){
        return mysqli_fetch_array($result);
        }
    function mysql_fetch_assoc($result){
        return mysqli_fetch_assoc($result);
        }
    function mysql_fetch_row($result){
        return mysqli_fetch_row($result);
        }
    function mysql_query($query){
        global $mysqli;
        $data=mysqli_query($mysqli,$query);
        if (!$data) {
         printf("Error: %s\n", mysqli_error($mysqli));
         exit();
        }
        return $data;
        }
    function mysql_escape_string($data){
        global $mysqli;
        return mysqli_real_escape_string($mysqli, $data);
        //return addslashes(trim($data));
        }
    function mysql_real_escape_string($data){
        return mysql_real_escape_string($data);
        }
    function mysql_close(){
        global $mysqli;
        return mysqli_close($mysqli);
        }
}
?>

laravel常用命令

//执行迁移
php artisan migrate
//数据回滚
php artisan migrate:rollback
//webpack生产
npm run production
//发布webpack
npm run dev
//重建节点
npm rebuild node-sass
//创建新表
php artisan make:migration create_表名_table --create=表名
//填充数据
php artisan db:seed
//添加字段
php artisan make:migration add_添加信息_to_表名_table --table=表名
//创建控制器
php artisan make:controller 控制器复数Controller --resource
//创建模块
php artisan make:model 模块 -m
//创建视图
php artisan generate:view 文件夹.视图
//创建控制器模块数据库增删改查文件
php artisan generate:resource 表名
//查看路由
php artisan route
//自动加载
composer dumpautoload
//重置key
php artisan key:generate

PHP中spl_autoload_register函数的用法

spl_autoload_register
(PHP 5 >= 5.1.2)
spl_autoload_register — 注册__autoload()函数
说明
bool spl_autoload_register ([ callback $autoload_function ] )
将函数注册到SPL __autoload函数栈中。如果该栈中的函数尚未激活,则激活它们。
如果在你的程序中已经实现了__autoload函数,它必须显式注册到__autoload栈中。因为
spl_autoload_register()函数会将Zend Engine中的__autoload函数取代为spl_autoload()或
spl_autoload_call()。
参数
autoload_function 
欲注册的自动装载函数。如果没有提供任何参数,则自动注册autoload的默认实现函数
spl_autoload()。
返回值
如果成功则返回 TRUE,失败则返回 FALSE。
注:SPL是Standard PHP Library(标准PHP库)的缩写。它是PHP5引入的一个扩展库,其主要功能包括autoload机制的实现及包括各种Iterator接口或类。 SPL autoload机制的实现是通过将函数指针autoload_func指向自己实现的具有自动装载功能的函数来实现的。SPL有两个不同的函数 spl_autoload, spl_autoload_call,通过将autoload_func指向这两个不同的函数地址来实现不同的自动加载机制。
范例
设我们有一个类文件A.php,里面定义了一个名字为A的类:

view plaincopy to clipboardprint?
<?php   
class A   
{   
public function __construct()   
{   
echo 'Got it.';   
}   
}


然后我们有一个index.php需要用到这个类A,常规的写法就是

view plaincopy to clipboardprint?
<?php   
require('A.php');   
$a = new A();


但是有一个问题就是,假如我们的index.php需要包含的不只是类A,而是需要很多类,这样子就必须写很多行require语句,有时候也会让人觉得不爽。


不过在php5之后的版本,我们就不再需要这样做了。在php5中,试图使用尚未定义的类时会自动调用__autoload函数,所以我们可以通过编写__autoload函数来让php自动加载类,而不必写一个长长的包含文件列表。

例如在上面那个例子中,index.php可以这样写:

view plaincopy to clipboardprint?
<?php   
function __autoload($class)   
{   
$file = $class . '.php';   
if (is_file($file)) {   
require_once($file);   
}   
}   

$a = new A();

 

当然上面只是最简单的示范,__autoload只是去include_path寻找类文件并加载,我们可以根据自己的需要定义__autoload加载类的规则。

此外,假如我们不想自动加载的时候调用__autoload,而是调用我们自己的函数(或者类方法),我们可以使用spl_autoload_register来注册我们自己的autoload函数。它的函数原型如下:
bool spl_autoload_register ( [callback $autoload_function] )

我们继续改写上面那个例子:

view plaincopy to clipboardprint?
<?php   
function loader($class)   
{   
$file = $class . '.php';   
if (is_file($file)) {   
require_once($file);   
}   
}   

spl_autoload_register('loader');   

$a = new A();

 

这样子也是可以正常运行的,这时候php在寻找类的时候就没有调用__autoload而是调用我们自己定义的函数loader了。同样的道理,下面这种写法也是可以的:

view plaincopy to clipboardprint?
<?php   
class Loader   
{   
public static function loadClass($class)   
{   
$file = $class . '.php';   
if (is_file($file)) {   
require_once($file);   
}   
}   
}   

spl_autoload_register(array('Loader', 'loadClass'));   

$a = new A();

php生成随机字符串

//生成随机数,用于生成salt
function random_str($length){
//生成一个包含 大写英文字母, 小写英文字母, 数字 的数组
$arr = array_merge(range(0, 9), range(‘a’, ‘z’), range(‘A’, ‘Z’));
$str = ”;
$arr_len = count($arr);
for ($i = 0; $i < $length; $i++){
$rand = mt_rand(0, $arr_len-1);
$str.=$arr[$rand];
}
return $str;
}