php压缩文件

批量压缩文件不递归压缩文件夹, 压缩完毕后清理原始文件.

php将文件夹打包成zip文件

function addFileToZip($path,$zip){
    $handler=opendir($path); //打开当前文件夹由$path指定。
    while(($filename=readdir($handler))!==false){
        if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..’,不要对他们进行操作
            if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归
                addFileToZip($path."/".$filename, $zip);
            }else{ //将文件加入zip对象
                $zip->addFile($path."/".$filename);
            }
        }
    }
    @closedir($path);
}

$zip=new ZipArchive();
if($zip->open('images.zip', ZipArchive::CREATE)=== TRUE){
    addFileToZip('images/', $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
    $zip->close(); //关闭处理的zip文件
}

不递归压缩路径文件夹

$zip = new ZipArchive();

if($zip->open('asds.zip')===true){

    $zip->addFile('./Public/Uploads/zip/123.zip', '456.zip'); // 就是这里

}

清空原始文件

// 来源于onethink-dir_delete函数
if (!is_dir($dir)) return FALSE; 
$handle = opendir($dir); //打开目录
while(($file = readdir($handle)) !== false) {
        if($file == '.' || $file == '..')continue;
        $d = $dir.DIRECTORY_SEPARATOR.$file;
        is_dir($d) ? dir_delete($d) : @unlink($d);
}
closedir($handle);
return @rmdir($dir);

相关资料

php将文件夹打包成zip文件
PHP 压缩包详细操作(ZipArchive)

laravel 插入数据报错 doesn’t have a default value 

laravel-mysql-默认为严格的验证方式

Tip: 在Config/database.php中设置’strict’ => false

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'unix_socket' => env('DB_SOCKET', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'strict' => fasle,
    'engine' => null,
],

相关资料

laravel中mysql默认使用了严格的验证方式

laravel文件上传

if ($request->isMethod('post')) {

            $file = $request->file('picture');

            // 文件是否上传成功
            if ($file->isValid()) {

                // 获取文件相关信息
                $originalName = $file->getClientOriginalName(); // 文件原名
                $ext = $file->getClientOriginalExtension();     // 扩展名
                $realPath = $file->getRealPath();   //临时文件的绝对路径
                $type = $file->getClientMimeType();     // image/jpeg

                // 上传文件
                $filename = date('Y-m-d-H-i-s') . '-' . uniqid() . '.' . $ext;
                // 使用我们新建的uploads本地存储空间(目录)
                $bool = Storage::disk('uploads')->put($filename, file_get_contents($realPath));
                var_dump($bool);

            }

}

相关资料

laravel-文件上传

php-composer构建框架系列文章-待实践

利用 Composer 一步一步构建自己的 PHP 框架(一)——基础准备

利用 Composer 一步一步构建自己的 PHP 框架(二)——构建路由

利用 Composer 一步一步构建自己的 PHP 框架(三)——设计 MVC

利用 Composer 一步一步构建自己的 PHP 框架(四)——使用 ORM


利用 Composer 完善自己的 PHP 框架(一)——视图装载

利用 Composer 完善自己的 PHP 框架(二)——发送邮件

[完结] 利用 Composer 完善自己的 PHP 框架(三)——Redis 缓存

相关资料

composer构建框架

php-PDO lastInsertId 返回0

当开启事务的情况

获取lastid语句写在commit之后lastid返回的是0

$dbh->beginTransaction(); 
$stmt->execute( array($data ['openid'], $createTime)); 
$dbh->commit(); 
$lastid = $dbh->lastInsertId(); 

获取lastid语句写在commit之前lastid返回的是自增id

$dbh->beginTransaction(); 
$stmt->execute( array($data ['openid'], $createTime)); 
$lastid = $dbh->lastInsertId(); 
$dbh->commit(); 

相关资料

PDO::lastInsertId函数返回0的原因

动手做接口前应该注意哪些问题?

  • 接口认证
  • 接口参数格式字段
  • 接口版本 保留几个版本 什么情况下需要强制升级
  • 自动化测试问题
  • 模块化分
  • 接口统计问题
  • 隐式用户与显式用户
  • 对于线上的 API 必须保证所有接口正常且关闭所有的错误信息 => error_reporting(0),在输出JSON 时,不能有任何其它输出,否则,客户端将解析数据失败,app直接闪退

相关资料

API接口开发过程中的注意事项

APP接口版本兼容的问题
APP版本强制升级
APP升级二三事:APP升级场景及功能设计总结
App后端API设计版本问题

PHP / Laravel API 开发推荐阅读清单 有写关于Laravel的资料比较久

Laravel 的两个包 dingo/API nwidart/Laravel-modules 包使用的疑虑?

最近一个项目用 Laravel-5.6 匆匆的上了 其实 Laravel 也还不太熟
我想后面的项目也都用一个框架 然后项目以模块的方式开发 所以我就找了一个分模块的包 nwidart/laravel-modules

这个包最后模块也可以打成 composer 包 这样在项目的模块在开发的时候可以各负责自己的 更新的时候回也可以不用全量更新 那个模块更新就 composer 那个就行.

而接口我需要分版本 v1 v2 这样的 所以就找了这个包dingo/api 看一些评论说Transformers这个挺好用的 还没尝尝呢…

因为当时也在催着 急急忙忙就把项目上了 现在想优化下东西就感觉有点麻烦 程序目前也比较简单 我想把这两个撤掉还是继续研究这个两个包和 Laravel 的关系呢?

相关

v2ex-讨论
laravel-讨论

laravel-获取客户端IP

可以在控制器中获取, 那么如何在类中或自定义的函数中呢? 

laravel-5.6


控制器中获取

<?php
use Request; // 方式1 可以在自定义类中或函数中或取到IP
// use Illuminate\Http\Request; // 方式2
// use Symfony\Component\HttpFoundation\Request; // 方式3
....

    public function test(Request $request)
    {
        Request::ip(); // 方式1 可以静态获取

        //$request->getClientIps(); // 方式2、3 获取ip
        //$request->ip(); 

        //request()->ip(); // 方式4直接通过助手函数获取

    }
....

源码位置: /vendor/laravel/framework/src/Illuminate/Http/Request.php

laravel-内置函数-helpers

  • laravel-5.6

文件位置: /vendor/laravel/framework/src/Illuminate/Support/helpers.php

<?php

use Illuminate\Support\Arr;
use Illuminate\Support\Str;
use Illuminate\Support\Optional;
use Illuminate\Support\Collection;
use Illuminate\Support\Debug\Dumper;
use Illuminate\Contracts\Support\Htmlable;
use Illuminate\Support\HigherOrderTapProxy;

if (! function_exists('append_config')) {
    /**
     * Assign high numeric IDs to a config item to force appending.
     *
     * @param  array  $array
     * @return array
     */
    function append_config(array $array)
    {
        $start = 9999;

        foreach ($array as $key => $value) {
            if (is_numeric($key)) {
                $start++;

                $array[$start] = Arr::pull($array, $key);
            }
        }

        return $array;
    }
}

......