关于php:PHP错误与异常

这篇文章基于PHP7 从PHP7起,PHP对异样做了较大扭转,引入了Error,调整了继承构造 Stringable 这是个interface,只有能转字符串的类都应该实现这个接口 Throwable 能被throw抛出的最根本的接口,然而PHP不容许间接实现这个接口 Exception 所有用户级异样的基类,想要自定义异样就能够继承这个 LogicException 代码逻辑谬误,就是代码写的不对 BadFunctionCallException 如果回调函数未定义或短少参数的时候,抛出这个异样 BadMethodCallException 如果回调办法未定义或短少参数的时候,抛出这个异样 DomainException 如果一个值不在无效的值列表中,则抛出这个异样 InvalidArgumentException 参数有效 LengthException 长度有效 OutOfRangeException 下标越界 RuntimeException 运行时异样 OutOfBoundsException 有效key,在编译阶段未检测进去的 OverflowException 溢出 RangeException 执行期间的范畴异样,相当于编译期间的DomainException UnderflowException 空对象上的有效操作,eg: 删除元素 UnexpectedValueException 值不在可承受汇合 ErrorException 谬误异样 Error 外部谬误的基类 TypeError 类型不匹配 ArgumentCountError 参数数量不匹配 ArithmeticError 数学运算谬误 DivisionByZeroError 除零谬误 AssertionError 断言失败谬误 CompileError 编译谬误 ParseError 解析PHP代码谬误 ValueError 传值谬误 UnhandledMatchError match未被匹配到任何分支 FiberError 在纤程上执行有效操作

June 7, 2022 · 1 min · jiezi

关于php:pcntlfork返回致命错误调用未定义函数pcntlfork

我在mac上用mamp集成环境跑的一个我的项目上要应用到pcntl_fork()函数,但奇怪的是我查看过php.ini曾经加载了pcntl扩大,composer也装置了ext-pcntl,然而调用的时候就是会报undefined function pcntl_fork(),找了很多方向都没有解决,要留神的一个点是PCNTL在 Windows 平台上不可用。 $pid = pcntl_fork();if($pid == -1){ file_put_contents('testlog.log',"\r\nFork Test",FILE_APPEND); return 1; //error}else if($pid){ return 0; //success}else{ file_put_contents($log, 'Running...', FILE_APPEND);}起初在stackoverflow上找到答案: 当应用Apache作为php服务器时,无奈应用性能'pcntl_fork'模块(例如XAMPP)。您只能在CGI模式或命令行中应用pcntl_fork。所以。。。把服务器换成nginx即可解决。

June 7, 2022 · 1 min · jiezi

关于php:ModStart如何关闭后台登录验证码

批改配置文件 vendor/modstart/modstart/config/modstart.php <?phpreturn [ // ... 'admin' => [ // ... 'login' => [ // 默认开启,批改为 false 示意敞开 'captcha' => true, ], ],];

June 7, 2022 · 1 min · jiezi

关于php:进销存管理系统源码PHP开源带APP版

 古代企业的一个独特特色是其复杂性。无论组织的规模如何,都有要跟踪的资产、要治理的员工和要剖析的数据。自动化能够使这所有更易于治理和了解。有许多专门的解决方案旨在满足公司外部特定部门的需要,但进销存管理系统提供了更全面和整体的办法。进销存管理系统解决方案已成为任何组织的必需品,因为它具备许多劣势,包含自动化、可见性、对所有操作的管制以及疾速的数据和资源管理。在本文中,咱们将探讨在组织中施行软件即进销存管理系统的指标、要害的进销存管理系统市场趋势以及 进销存管理系统 零碎的组件。咱们还提供了开发和保护这些零碎的有用技巧。 进销存管理系统源码及演示:e.csymzs.top 企业资源布局软件旨在管制企业的数据和资产。此类软件涵盖各种业务流程,例如制作、分销、销售、财务和人力资源 (HR)。进销存管理系统还治理组织的标准化数据和经营模型。 进销存管理系统解决方案能够解决: 惯例和重复性工作 财务管理 做决定 部门之间的互动 与客户的互动 公司业绩剖析 进销存管理系统的外围模块 为了使 进销存管理系统零碎具备竞争力,开发人员必须牢记对此类软件的新要求。尽管定制的 进销存管理系统 零碎应该满足特定组织的确切要求,但一些外围模块对于简直任何组织都是必不可少的。让咱们看看这些模块是什么。 生产治理。该模块治理制作及其相干的所有,从生产调度和作业管理到老本跟踪和品质管制。生产治理模块的常见局部是物料打算、项目管理、制作治理和报告。该模块还能够包含研发治理性能。 财务管理。该模块是任何 进销存管理系统零碎的外围,因为它解决公司的所有金融资产和任何相干交易。财务管理模块通常包含会计、工资单、计费、报告和剖析性能。现在,该模块可能可能应用实时财务数据在几秒钟内实现诸如计算支出之类的事件。 人力资源管理。每家公司都必须治理员工,为他们提供必要的企业信息和人力资源文件,跟踪考勤和绩效,招聘和入职新员工等。 库存治理。此性能有助于治理、管制和跟踪从库存到货到投入生产的整个过程。它通常还蕴含宽泛的估算性能。库存治理模块容许用户跟踪残余原材料、库存产品数量等。挪动集成对于该模块至关重要。近程管制洽购和仓储的能力通常蕴含在 进销存管理系统中。此外,如果企业解决物流或须要跟踪从供给阶段到起点的库存门路,此模块也至关重要。 供应链治理。供应链很简单,治理它们的模块通常由几个子应用程序组成。他们负责需要打算、运输和供应商治理。现在,供应链治理模块也可能与人工智能驱动的剖析和预测技术一起应用。借助人工智能,进销存管理系统零碎能够依据收集的数据预测需要。 客户关系治理。该模块解决营销和销售治理。它容许公司治理合作伙伴和客户的联系人、潜在客户、关系状态和提供给合作伙伴的服务,并跟踪个别案例。该模块的根本元素是客户列表,它提供了跟踪通信并具体理解与特定客户或合作伙伴关系的能力。 物流配送治理。应亲密监控仓库和生产设施之间的供应品和产品的流动。物流包含供给洽购、订单跟踪和最终产品分销的治理。与库存治理模块集成后,物流和配送治理性能提供了对所有资料资产的残缺可见性。 商业智能。该模块收集经营数据,对其进行剖析,并将其转换为表格和仪表板。应用这些信息,业务分析师和经理能够更轻松地发现趋势、辨认低效率并做出理智的决策。借助人工智能技术,商业智能模块还能够预测将来的市场趋势。 销售治理。该模块的外围性能包含主动交易和订单解决、包装和运输。AI 性能能够通过提供应用机器学习技术生成的剖析和统计报告来加强此模块的工作。 如前所述,下面的列表并不详尽。开发人员应依据指标受众和行业的要求包含模块。其余须要思考的常见模块是反对、平安和独自的电子商务模块。 然而,性能蠕变在 进销存管理系统世界中是实在存在的。在简略性、可用性和满足每个潜在客户的功能集之间找到均衡很重要。 此外,还能够在进一步的开发迭代中增加新模块。在开发和改良您的解决方案时,最好记住可能呈现的常见问题。 进销存管理系统的开发挑战 与任何软件开发过程一样,在创立 进销存管理系统 软件时,您可能会面临一些对最终产品产生负面影响的艰难。咱们曾经概述了一些最常见的挑战以及防止它们的办法。 进销存管理系统开发的挑战 特色复杂性。并非每家公司都筹备好投资于低廉的员工培训,以驯服其新 进销存管理系统的宽泛功能集和界面。后果,许多性能可能未被应用,从而升高了产品为业务带来的价值。在开发 进销存管理系统解决方案时,最重要的是在用户敌对性和宽泛的功能集之间找到适当的均衡。 业务整合。进销存管理系统要求公司调整其业务流程和基础设施以进行集成。这个过程漫长且老本昂扬,企业往往不愿承当。在开发 进销存管理系统 的外围时,最好在指标客户中开发与最罕用的解决方案的集成。 数据迁徙。一些 进销存管理系统开发人员难以治理和导出客户数据、创立独特的数据格式等。因而,将数据从一个 进销存管理系统零碎迁徙到另一个零碎通常效率低下,可能须要一年多的工夫。应用常见的数据格式和风行的数据库来确保将客户数据顺利迁徙到您的 进销存管理系统 十分重要。 不足定制。进销存管理系统 零碎通常不足本地 进销存管理系统零碎的定制性和灵活性。客户本人的程序员应该可能轻松编写脚本、调整代码或应用低代码/无代码工具,以使零碎更不便业务。认真的需要收集和宽泛的反对是解决这个定制问题的最佳办法。 不足数据安全性。在云和进销存管理系统解决方案中,客户和供应商独特负责数据安全。数据指出,次要的云供应商确保数据保护,但他们的客户对他们的工作没有给予足够的器重。确保您的解决方案平安是必须的。您还能够为客户提供数据保护策略指南,以确保数据受到单方的爱护。 采纳速度。集成新的或替换旧的 进销存管理系统零碎总是会导致 IT 开销、员工的负面反馈和集成挑战。进销存管理系统 开发人员最好通过暗藏技术平台背地的复杂性并创立 API 来简化此过程。 暗藏的基础设施相干费用。一些供应商在订阅费的同时减少了暗藏费用。这些可能是基础设施、施行、许可等方面的费用。这些问题天然会导致客户对供应商和解决方案不称心。为防止这种状况,进销存管理系统 开发人员须要一个清晰的沟通策略来提供无关费用构造和变动的信息。 行业合规性。每个行业都有一套特定的法规要恪守。有一个正当的担心是,一种万能的 进销存管理系统 解决方案无奈确保合乎所有这些要求。解决此问题的最佳办法是创立针对特定行业的解决方案。 论断 进销存管理系统零碎是企业治理的无效工具。这样的零碎可帮忙您主动执行日常工作、放慢程序、剖析日常流动并改良经营。古代进销存管理系统往往包含人工智能驱动的剖析以及对物联网和区块链技术的反对。最好是模块化开发的进销存管理系统,并使其跨平台。同时,软件应该是可定制的和行业特定的。 ...

June 6, 2022 · 1 min · jiezi

关于php:PHP命名空间

本文是温习所写,并不会涵盖一些根底知识点定义 命名空间就相当于操作系统中目录的概念 次要是为了解决以下两个问题: 用户编写的代码与PHP外部的类/函数/常量或第三方类/函数/常量之间的名字抵触为很长的标识符名称(通常是为了缓解第一类问题而定义的)创立一个别名(或简短)的名称,进步源代码的可读性<?phpnamespace Mayi\Demo;class Test{ }命名空间大小写不敏感,个别首字母大写 同一文件中能够定义多个命名空间,不举荐应用 <?phpnamespace Mayi\Demo{ class Test { }}// 全局代码namespace { $a = 1;}namespace关键字与\_\_NAMESPACE\_\_魔术常量 <?phpnamespace Mayi{ class Test { public function foo() { echo __NAMESPACE__; } }}namespace Mayi\Demo{ class Test { public function foo() { echo __NAMESPACE__; } }}function foo(){ echo __NAMESPACE__;}// namespace指代以后文件的命名空间namespace\foo();(new namespace\Mayi\Test)->foo();(new namespace\Mayi\Demo\Test)->foo();应用命名空间 <?phpnamespace Demo;use Mayi; // 导入use Mayi\Demo as MayiDemo; // 导入并起别名

June 6, 2022 · 1 min · jiezi

关于php:PHP纤程

PHP8.1新增适应场景如同没多少根底 纤程(Fiber)示意一组有残缺、可中断的性能。能够在调用栈中的任何地位被挂起,在纤程内暂停执行,直到稍后复原 <?php$fiber = new Fiber(function () : void { echo 1; $value = Fiber::suspend('inside'); // 挂起Fiber并向内部传值,值能够是任意类型 echo "Value used to resume fiber: ", $value, PHP_EOL;});$value = $fiber->start();echo "Value from fiber supending: ", $value, PHP_EOL;$fiber->resume(2); // 形式一 唤起Fiber并传入任意值$fiber->throw(new \Exception("未定义值")); // 形式二 应用异样唤醒

June 5, 2022 · 1 min · jiezi

关于php:PHP枚举

PHP8.1新增根底 Enum相似class 枚举的case能够定义0个或多个 枚举间比照没有意义,总是返回false。case是能够比照的 <?phpenum Colors{ case Red; case Blue; case Green; public function getColor(): string { return $this->name; } }function paintColor(Colors $colors): void{ echo "Paint : " . $colors->getColor() . PHP_EOL; }paintColor(Colors::Red);paintColor(Colors::Green);paintColor(Colors::Blue);/* output : ------------------------ Paint : Red Paint : Green Paint : Blue */回退枚举 case默认是类实现的,case能够赋值标量,这时case的类型会由简单类型转为简略类型,这种称为回退 回退枚举只有一个value属性 回退枚举实现了BackedEnuminterface,额定裸露了from()、tryFrom()办法 枚举值必须是确定的,不能是可变的 <?phpenum Suit: string{ case Hearts = 'H'; case Diamonds = 'D'; case Clubs = 'C'; case Spades = 'S';}print Suit::Clubs->value;print Suit::from('H');print Suit::tryFrom('XX') ?? Suit::Hearts;枚举办法 ...

June 4, 2022 · 1 min · jiezi

关于php:PHP类与对象

本文是温习所写,并不会涵盖一些根底知识点 基本概念 应用class关键字来定义类,应用new来创立类的实例 <?phpclass Test{ public $attr = 1; // 公共属性 public function foo() { echo $this->attr; }}// 形式一$obj = new Test();$obj->foo();// 形式二// 与可变函数相似,称为可变类吧$className = 'Test';$obj = new $className();$obj->foo();// 形式三 PHP8function getClassName(){ return 'Test';}$obj = new (getClassName());$obj = new (Test::class);在类外部能够应用new self、new parent创立新对象 将对象实例赋值给一个新变量时,新变量拜访的是同一实例。要创立一个新实例必须应用克隆操作 类的属性和办法存在与不同的空间,所以同一个类的属性和办法能够应用同样的名称应用extends实现类继承,PHP只反对单继承。::class类名解析 <?phpnamespace Demo{ class Test() { } // 形式一 echo Test::class;}// 形式二 PHP8$obj = new Test();echo $obj::class; // 等同于 get_class()Nullsafe办法和属性 PHP 8 ?->nullsafe操作符,对象援用解析为null时不抛出异样,而是返回null 属性 <?phpclass Test{ // 拜访控制符 public $attr = 1; protected $attr1 = 2; private $attr2 = 3; // 动态 public static $attr3 = 4; // 类型申明 PHP7.4 public int $attr4 = 4; // 只读 PHP8 public readonly $attr5 = 5;}类常量 ...

June 3, 2022 · 2 min · jiezi

关于php:PHP流程控制

本文是温习所写,并不会涵盖一些根底知识点if elseif else while do-while for foreach break 能够承受一个数字参数,指定跳出几重循环,默认是1 continue 在循环构造中,跳过循环体残余代码的执行,同样能够承受一个数字参数,指定跳过几层循环,默认是1 switch match PHP 8 <?php$a = 'cake';$value = match($a) { 'apple' => 'This food is an apple', 'bar' => 'This food is a bar', 'cake' => 'This food is a cake',}var_dump($value);declare 用来设定一段代码的执行指令 <?phpdeclare(ticks=1); // 形式一// 形式二declare(ticks=1) { // ...}Ticks Tick(时钟周期)是一个在 declare 代码段中解释器每执行 N 条可计时的低级语句就会产生的事件 <?phpdeclare(ticks=1);function tickHandler(){ echo 'called!' . PHP_EOL;}register_tick_function('tickHandler'); // 注册事件,引起tick事件$a = 1; // 引起tick事件if ($a>0) { $a += 2; // 引起tick事件}unregister_tick_function('tickHandler'); // 勾销事件Encoding ...

June 2, 2022 · 1 min · jiezi

关于php:PHP-对接微信公众号订阅消息详细教程

订阅告诉是一个用户被动订阅、服务号按需下发的告诉能力。应用过程请恪守《微信公众平台服务协定》《微信公众平台经营标准》。 用户在前述场景被动订阅后,服务号可通过接口向用户发送订阅告诉,如信用卡动账揭示、物流到货告诉等。订阅告诉分为一次性订阅和长期订阅,一次性订阅是指用户订阅一次,服务号可不限工夫公开发一条对应的订阅告诉;长期订阅是指用户订阅一次,服务号可长期屡次下发告诉,长期订阅告诉仅向政务民生、医疗等公共服务畛域凋谢。 微信订阅音讯和微信模版音讯的区别在于模版音讯能够忽视用户的主观意识,间接发给用户;而订阅音讯则必须用户批准零碎能力发给用户。这样防止了给用户带来的骚扰。 因为微信有打算应用订阅音讯来取代模版音讯,所以常识付费新增了订阅音讯性能,常识付费零碎能够抉择应用模版音讯还是订阅音讯。上面咱们就来看看常识付费是如何加订阅音讯性能的。 常识付费订阅音讯如何增加呢? 第一步:公众号增加订阅音讯 第二步:对照咱们常识付费后盾的订阅音讯增加订阅音讯 第三步:代码里增加订阅音讯 常识付费根目录下 extend\service\RoutineTemplateService 增加新的订阅音讯 增加发送办法: 例如上面的办法: public static function sendOrderSuccess(array $data, $uid, $link = ''){ RoutineTemplateService::sendTemplate(WechatUser::uidToOpenid($uid), RoutineTemplateService::setTemplateId(RoutineTemplateService::ORDER_PAY_SUCCESS), $link, $data);}发送订阅音讯 $data['character_string1']['value'] = $orderId;$data['amount3']['value'] = $order['pay_price'];$data['time2']['value'] = date('Y-m-d H:i:s', time());$data['thing6']['value'] = '您购买的材料已领取胜利!';RoutineTemplate::sendOrderSuccess($data, $order['uid'], $site_url . Url::build('wap/material/my_material'));第四步:前端用户触发订阅音讯 通过微信文档,咱们能够看到微信公众号的订阅音讯是通过 wx-open-subscribe 标签来调起抉择的。如下事例: <wx-open-subscrib template="TenvU22BA1jCp4YHfYEpRuESXYReQyDuhs4vbdWA99I" id="subscribe-btn"> <script type="text/wxtag-template" slot="style"> <style> .subscribe-btn {color: #fff;background-color: #07c160;} </style> </script> <script type="text/wxtag-template"> <button class="subscribe-btn"> 一次性模版音讯订阅 </button> </script></wx-open-subscribe><script>var btn = document.getElementById('subscribe-btn');btn.addEventListener('success', function (e) { console.log('success', e.detail);}); btn.addEventListener('error',function (e) { console.log('fail', e.detail);});</script>依据事例咱们能够理解应用 wx-open-subscribe 标签给 template 属性传入你须要弹出的订阅音讯模板 ID 即可,多个以英文逗号分隔。 ...

June 2, 2022 · 1 min · jiezi

关于php:php实现pdf转图片

php实现pdf转图片所需Imagick拓展php的spatie/pdf-to-image插件包Ghostscript软件一:Imagick拓展装置参考:PHP的Imagick拓展装置 二:php的spatie/pdf-to-image插件包装置composer require spatie/pdf-to-image三:Ghostscript软件装置1:Ghostscript下载地址:Ghostscript下载地址2:装置Ghostscripttar -xzf ghostscript-9.56.1.tar.gzcd ghostscript-9.56.1./configuremake && make install3:配置Ghostscript批改/etc/ImageMagick-6/policy.xml文件(1):将pattern="{PS,PDF,XPS}"这行批改成 <policy domain="module" rights="read|write" pattern="{PS,PDF,XPS}" />(2):将pattern="PDF"批改成 <policy domain="coder" rights="read|write" pattern="PDF" />四:实现pdf转图片实例$pdfPath = 'XXX';//PDF地址$pdfToImg = new \Spatie\PdfToImage\Pdf($pdfPath);$pages = $pdfToImg->getNumberOfPages();$fullPath = 'XXX';//图片保留地址$imgs = [];for ($i = 1; $i <= $pages; $i++) { $imgFile =$i . '.png'; $pdfToImg->setPage($i)->saveImage($fullPath . '/' . $imgFile); $imgFiles[] = $fullPath . $imgFile;}return $imgFiles;//图片地址数组依据如上就能够实现将pdf转成图片,多张pdf会转成多张图片

June 1, 2022 · 1 min · jiezi

关于php:PHP函数

本文是温习所写,并不会涵盖一些根底知识点用户自定义函数 <?php/** * 示例函数 * * @param mixed $arg1 参数一 * @param mixed $arg2 参数二 * @param mixed $argN 参数N * @return mixed */function foo($arg1, $arg2, $argN){ return 'called!';}PHP中函数是全局的,只有定义了就能够在任何中央调用函数外部能够写任何无效的PHP代码,就算定义函数和类也是能够的PHP不反对函数重载,也不能取消定义和重写义已申明函数递归调用时,要防止超过100~200层函数参数 援用传参 <?phpfunction foo(&$arg){ $arg = 1;}在参数后面加上&能够将值传递变为援用传递,在函数内对变量做的操作会扭转函数外的变量 参数默认值 <?phpfunction foo($arg='demo'){ var_dump($arg);}默认值必须是常量表达式,不能是变量、类成员、函数调用等 可变数量参数 <?phpfunction foo($arg, ...$args){ var_dump($arg); var_dump($args);}foo(1,2,3,4,5);foo([1,2,3]);在参数前加...来标识这个参数是可变参数 可变参数只能是参数列表中最初一个 也能够通过func_num_args()、func_get_arg()、func_get_args()函数来获取可变参数 命名参数 PHP 8 有了命名参数后在调用函数时就能够疏忽参数程序,配合参数默认值应用的话就能够在应用函数时只传须要的参数而不必要将无意义的值也传上 命名参数通过在参数名前加上冒号来传递,能够应用保留关键字,但不能应用变量 <?phpfunction foo(first_num: $a, last_num: $b){ return $a + $b;}返回值 应用return能够返回任何类型数据,return会立刻终止函数的执行,并将执行权交还给调用者 能够应用list解包数组类型的返回值 <?phpfunction foo(){ return ['one', 'two'];}list($a, $b) = foo();函数返回援用类型值时,函数申明和函数调用前都必须加& ...

June 1, 2022 · 2 min · jiezi

关于php:ModStartBlog-v500-发布-全新架构系统手机端更快速

零碎介绍ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场领有丰盛的性能利用,反对后盾一键疾速装置,让开发者能快的实现业务性能开发。 零碎齐全开源,基于 Apache 2.0 开源协定。 零碎演示 性能个性丰盛的模块市场,后盾一键疾速装置 会员模块通用且残缺,反对残缺的API调用 大文件分片上传,进度条显示,已上传文件治理 弱小的模块扩大性能,所有模块能够无缝集成,反对在线装置、卸载模块 欠缺的开发助手,实现模块、主题的的一键创立 欠缺的后盾权限治理,反对基于RBAC的权限管理系统 后盾治理反对应用手机、平板、PC,无论何时何地都可方便管理 第三方登录(QQ、微信、微博、支付宝、微信小程序) 第三方领取反对(微信、支付宝、支付宝当面付、微信扫码、微信小程序) 第三方云存储反对,反对云贮存分片上传(阿里云、百度云、华为云、腾讯云、FTP、七牛云、UCloud、又拍云) 第三方短信反对(阿里云、腾讯云、华为云、百度云、253云通信、聚合、七牛云、融云、赛邮、UCloud、云片、网易云) V5.0.0版本更新2021年05月26日魔众题库系统公布v5.0.0版本,减少了以下5个个性: [新性能] 启用结算核心子系统 [新性能] 零碎主题色可后端调整 [新性能] 后端架构降级ModStart [系统优化] 前端应用uni-app重构,体验更佳 [系统优化] 优化局部已知问题 2021年05月05日魔众题库系统公布v4.1.0版本,减少了以下5个个性: [系统优化] 题目不存在时页面谬误提醒 [系统优化] 后盾标签显示优化 [系统优化] 优化前端打包标准,缓存公共逻辑 [系统优化] 页面布局优化,自适应显示更智能 [系统优化] 文件治理弹框显示优化 [系统优化] 多处接口数据获取对立优化 模块市场一键装置零碎内置模块市场,有行业利用、插件、云存储、云短信等功能模块,后盾反对一键装置、启用、禁用、卸载,可疾速搭建属于本人的零碎利用。 功能模块 零碎演示与文档码云仓库:https://gitee.com/modstart/Mo... Github仓库:https://github.com/modstart/M... 零碎演示:https://cms.demo.tecmz.com/ 下载试用:https://modstart.com/download 开发者文档:https://modstart.com/doc 模块市场:https://modstart.com/store

May 31, 2022 · 1 min · jiezi

关于php:PHP的Imagick拓展安装

一:windows下装置Imagick拓展1. 下载ImagickImagick下载地址 imagick拓展下载地址 2. 装置Imagick[1]将下载下来的安装包解压而后将php_imagick.dll复制到你的php/etc目录下,将其余dll结尾的文件复制到php目录下[2]关上php.ini文件增加extension=php_imagick.dll[3]重新启动Apache,执行php -m应用用提醒ImageMagick number of supported formats为0时,须要装置imagemagick 3. imagemagick装置imagemagick下载地址:imagemagick下载地址将下载下来的imagemagick文件解压到C:\Program Files (x86)目录下将C:\Program Files (x86)\ImageMagick\bin退出到零碎环境变量path中而后将C:\Program Files (x86)\ImageMagick\bin目录下所有的以dll结尾的文件复制到php目录下,如果提醒反复点击跳过即可,复制实现后重启Apache,这时候php的imagick拓展装置实现 二:linux下装置Imagick拓展1. 装置ImageMagick[1]:ImageMagick下载地址:imagemagick下载地址wget http://www.imagemagick.org/download/ImageMagick.tar.gz[2]:解压装置tar zxvf ImageMagick.tar.gzcd ImageMagick-7.0.8-16/./configure --prefix=/usr/local/imagemagickmake && make install2. 装置imagick拓展[1]:下载imagick地址:imagick下载地址wget https://pecl.php.net/get/imagick-3.4.3.tgz[2]:装置Imagicktar zxvf imagick-3.4.3.tgz #解压cd imagick-3.4.3//usr/local/php/bin/phpize #用phpize生成ln -s /usr/local/imagemagick/include/ImageMagick-7 /usr/local/imagemagick/include/ImageMagick #ImageMagick 6.8以上版本为/usr/local/include/ImageMagick-X,在configure之前先做下软连贯./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/imagemagick #编译make && make install #装置PHP imagick扩大装置可能会遇到的问题解决:configure通过,在make时呈现谬误error: wand/MagickWand.h: No such file or directory解决办法 yum install gtk2-develexport PKG_CONFIG_PATH=/usr/local/imagemagick/lib/pkgconfig/而后重新安装imagick [3]:批改php.ini配置如果你不晓得php.ini在哪,应用如下命令查找php.ini地址 find / -name php.ini给php.ini增加 extension=imagick.so重新启动nginx /usr/local/nginx/sbin/nginx -s reopen如此Imagick拓展装置胜利

May 31, 2022 · 1 min · jiezi

关于php:PHP数据类型

本文是温习所写,并不会涵盖一些根底知识点PHP中总共是4中标量类型、4种复合类型、2种非凡类型 标量类型 boolint GMP, GNU Multiple Precision, 用于解决任意长度整数 BC Math, 任意精度数学, 提供了加、减、乘、除、余等操作函数 float <?php$a = 1.23;$b = 1.2e3;$c = 7E-10;$d = 1_324.33; // 从PHP7.4.0开始反对浮点运算可能会产生NAN, 不代表任何值,所以不能跟任何值比拟,包含本身。基于此PHP专门提供了is_nan()函数来查看是否是NAN 浮点数比拟得话有两种形式: <?php// 第一种,应用BC Math函数 举荐$a = 231.222;$b = 231.22222;bccomp($a, $b);// 第二种,与机器极小值比拟$epsilon = 0.0001;if (abs($a-$b) < $epsilon) { echo '两数相等';}string <?php/* * 单引号 * 最污浊的string,不会解析变量与特殊字符 * ' \ 在单引号string中有特殊作用,要想输入这两个字符须要在后面用 \ 本义一下 */$a = '字符串';$b = '字\'符串';$c = '字符\\串';/* * 双引号 * 最重要的就是会解析变量 */$d = "这是双引号{$a}";/* * Heredoc构造 * 以<<<加标识符换行开始,换行以标识符完结.结尾标识符双单引号可省略 * 规定跟双引号字符串统一 */$g = 'c';$e = <<<"Eof"这是Heredoc{$a}这是Heredoc${$g}Eof;/* * Nowdoc构造 * 以<<<加标识符换行开始,换行以标识符完结.结尾标识符必须应用单引号 * 规定跟单引号字符串统一 */$f = <<<'Eof'这是Nowdoc字符串Eof;PHP并没有明确指明string的编码,因而string会被依照源码文件的编码来编码, 举荐应用UTF8-BOM编码 ...

May 31, 2022 · 1 min · jiezi

关于php:PHP变量与常量

本文是温习所写,并不会涵盖一些根底知识点变量命名 有数字、字母、下划线组成,不能以数字结尾,用正则表达式形容为^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$。这大略是所有语言通用的规定,只不过PHP中变量名前要加上$ 赋值 变量有两种赋值形式:传值赋值和援用赋值。 默认是传值赋值 预约义变量 PHP提供了大量的预约义变量,这些变量被别离放到几个数组中,称为预约数组。这些数组在全局范畴内失效,所以也被称为超全局变量 $GLOBALS$_SERVER$_GET$_POST$_REQUEST$_SESSION$_COOKIE$_ENV$php_response_header - HTTP 响应头,当应用HTTP包装器时将会被HTTP响应头信息填充$argc$argv作用域 <?php/* * 以后文件范畴内失效 * 包含require、include进来的文件 */$a = 1;include 'b.php';function c(){ /* * 函数外部的变量是跟函数内部的隔离的 * 通过global关键字能够将函数内部的变量援用进来 */ global $a; $d = 2; $d += $a; $d += $GLOBALS['a']; // 也能够通过这种形式来拜访$a变量 /* * 也能够将变量申明为动态的 * 动态变量是在编译阶段就调配到非凡的内存空间,称为动态空间 * 动态变量只会初始化一次,并且不会随着函数的退出而销毁 * 千万不要援用赋值给动态变量,不会报错然而会跟预期不统一 */ static $e = 0; $e += 1;}可变变量 <?php$a = 'hello';$b = ['hello'];/* * 等价于${$a} * {}是限定符,用来明确范畴 * $a的值是纯数字的话也能够失常执行 */$$a = 'hi';${$b[0]} = 'hi';// 类属性也能够通过这种形式拜访class Test{ public $hello = 'class inner';}(new Test())->$a;(new Test())->{$b[0]};常量命名 ...

May 30, 2022 · 1 min · jiezi

关于php:UEditorPlus-v210发布-演示网站重构浮动工具和表格双击优化

UEditor是由百度开发的所见即所得的开源富文本编辑器,基于MIT开源协定,该富文本编辑器帮忙不少网站开发者解决富文本编辑器的难点。 UEditorPlus 是有 ModStart 团队基于 UEditor 二次开发的富文本编辑器,次要做了款式的定制,更合乎古代浏览器的审美。 在开发过程中解决了局部应用上的Bug,期待更多搭档一期退出保护。 版本介绍UEditorPlus v2.1.0 曾经公布,这个版本次要解决了款式问题、表格过拽问题,新增了 unsetFloating 办法,不便动静 Editor 的工具栏浮动解决。 新增:新增unsetFloating办法,不便动静Editor浮动工具栏解决 优化:表格边框双击工夫调整为200ms(解决拖拽提早问题) 优化:重新整理Demo页面也代码 修复:右击菜单图标和工具栏菜单抵触问题 对于Bug反馈与保护家喻户晓 UEditor 应用的人数多,目前曾经累积了N个Bug,开源不易须要大家独特保护 对于在理论应用中遇到的问题,如果急需解决举荐应用 悬赏Issue ,这样让更多有能力的开发者有独特保护的能源 在线演示https://open-demo.modstart.co... 开源地址国内:https://gitee.com/modstart-li... 国外:https://github.com/modstart-l...

May 30, 2022 · 1 min · jiezi

关于php:metadmin后台管理系统用php编写的后台

metadmin后盾管理系统介绍:话一下 metadmin后盾管理系统 开源初衷,唱衰PHP的声音最近这几年始终一直,在这个挪动互联网的时代所有都要快快快,置信很多其余语言的敌人曾经不会专门花工夫去深刻学习PHP这门语言了,然而原有历史遗留的零碎还是要保护和找上门的我的项目还是要接,因而某些时刻的确须要一款性能成熟且稳固,易扩大,易保护的后盾(网站)程序去做短平快的我的项目和需要,那么还是有一点事实的市场空间存在。这就是让我把这个零碎欠缺并开源进去的目标。 在写这个我的项目的过程我的想法是要应用成熟的开源我的项目集成,不要反复造轮子;代码要复用让工作量能一个人实现,能节省时间;性能要肯定水平反对主动生成,实现疾速搭建。 metadmin后盾管理系统 的适应性很强,进可做企业治理后盾/erp零碎,退可做网站后盾并自带一个简略的前台博客模块作为预览 metadmin后盾管理系统 基于 thinkphp6.0框架 + layuimini后盾治理模板 组合实现性能开发。 点击链接能够进去对应官网查看开发文档 metadmin后盾管理系统 数据库反对mysql/sqlite 零碎特点:1.全我的项目应用三层架构,数据层,管制层,视图层拆散2.数据层全副应用接口返回和复用反对各种客户端拜访接口3.反对内容模型自定义,可用于内容公布(例如文章,产品)4.后盾表单反对配置动静生成5.后盾用户权限反对规定定义并主动获取6.反对mysql/sqlite多种数据库7.应用成熟的开源我的项目集成(thinkphp+layuimini后盾模板)8.各个性能反对表格导入导出简化数据保护应用:1.数据库连贯默认为sqlite,带有测试数据2.装置依照thinkphp的官网教程 在web服务器中将根目录指向我的项目根目录并绑定域名, 同时将public设置为运行目录, 3.在命令行关上我的项目根目录并执行 composer update 命令装置全副蕴含的库文件 4.在浏览器中拜访本人设置的域名即可(本机运行还需批改本机host) http://域名/admin ### 后盾治理地址 http://域名/blog ### 前台预览地址 我的项目链接:github: https://github.com/mgckid/metacms gitee:https://gitee.com/mgckid/metacms 联系方式:如果各位朋友有相似需要和雷同观点那么这个程序就很适宜你,若须要进一步性能扩大和二次开发能够分割我(加群找群主) metadmin/metacms/form开源交换qq群(691932844) 后盾成果:

May 29, 2022 · 1 min · jiezi

关于php:PHP基本语法

本文是温习所写,并不会涵盖一些根底知识点PHP标记 因为PHP与HTML能够混编,所以须要明确标识出PHP代码块从而解析 残缺模式:<?php ?>简写模式:<? ?>echo简写模式:<?= '输入字符串' ?>工程上举荐应用残缺模式,不便多人合作开发 在PHP文件中举荐省略结尾标记的写法 指令分隔符 PHP应用;(英文分号)来做语句分隔符。每条语句都须要加上分隔符标识语句完结 实践上最初一条语句能够不加分隔符,但并不举荐这么做 正文 正文是最好的文档,看到没有文档的程序你可能会想杀了写这程序的人 单行正文 // 正文内容,个别写到语句结尾或代码块后面 多行正文 /* * 正文内容 * ... *//* */ 两头的内容就是正文内容,为了好看你可能会加些没什么用的符号 多行正文不能嵌套应用,因为它会匹配最近的结束符 PHP/HTML混编 总体来说,应用PHP管制HTML块比应用PHP echo效率高,代码格调也更加优雅 两种格调比照: <?php if ($expression == true): ?> This will show if the expression is true.<?php else: ?> Otherwise this will show.<?php endif; ?> <p>This is going to be ignored by PHP and displayed by the browser.</p><?php echo 'While this is going to be parsed.'; ?><p>This will also be ignored by PHP and displayed by the browser.</p>

May 28, 2022 · 1 min · jiezi

关于php:PHP架构与生命周期

SAPI SAPI就是Server Application Programming Interface,即服务器利用编程接口。它定义了一个对立的接口,提供给内部应用程序与PHP通信。常见SAPI协定版本有: CGI Common Gateway Interface,即通用网关接口。因为服务器并不能间接与PHP交互,所以须要有个转换的过程,CGI就是定义了这个转换的规定 当一个申请来到服务端的时候,web服务程序会应用CGI协定将申请转换成PHP能了解的信息,PHP返回信息的时候也是通过CGI协定来转换 FastCGI FastCGI是CGI协定的升级版,次要是将CGI解释器过程放弃在内存中并因而取得高性能。 FastCGI更多的是像一个C/S架构软件,通过tcp承受申请,因此实现了FastCGI的软件更适宜分布式部署 CLI PHP Command Line Interface, 即命令行运行接口。用于解释命令行PHP脚本 Apache2handler 也被称为模块模式,将PHP注册成Apache模块的形式来运行。这种形式PHP是随Apache一起启动并运行,它是Apache在CGI的根底上进行的扩大,能够放慢PHP的运行效率 ISAPI 5.3当前删除 Internet Server Application Program Interface,是微软开发专门用于IIS的协定,只能在Windows上应用。它实现了CGI所有的性能并进行了扩大,如提供了过滤器利用程序接口。 ISAPI利用大多数以DLL动静库的模式加载,解决完用户的申请后能够期待下一个用户申请,另外ISAP的DLL应用程序和WEB服务器处于同一过程中,效率显著高于CGI 这种形式最大的毛病就是稳定性不好,PHP呈现问题的时候WEB服务器的过程也会挂掉 Embed 嵌入式,能够供C\C++调用PHP函数的能力 Fuzzer 如同是用于源码审计的,不太确定,相干材料好少 litespeed 很少有人用,它是免费的WEB服务器 phpdbg 用于PHP代码调试,跟gdb性能相似 PHP-CGI 由PHP提供实现了CGI协定的程序,每个申请都会开启一个php-cgi过程来解决,如果更改了配置须要重启能力失效 PHP-FPM 有PHP提供实现了Fast-CGI协定的程序,它不会像PHP-CGI一样每次都从新开启一个过程,解决实现之后就敞开这个过程。而是容许一个过程对多个连贯进行解决,解决实现之后会期待下一个申请。PHP-FPM是常驻内存的,会开启多个PHP-CGI程序,而一个PHP-CGI根本耗费7~25M内存,因而连贯过多就会导致内存耗费过大 PHP中CGI的实现 其本质是以socket编程实现一个TCP或UDP协定的服务器。当启动时,创立TCP/UDP协定服务器的socket监听,并承受相干申请进行解决。这只是申请的解决,在此基础上增加SAPI初始化、模块初始化、模块敞开、SAPI敞开等就形成了整个CGI的生命周期。 SAPI都通过的几个阶段 Module Init 调用每个扩大的PHP_MINIT_FUNCTION中的办法初始化模块,进行一些变量申请、内存调配等。 Request Init 承受申请后调用每个扩大的PHP_RINIT_FUNCTION中的办法,初始化PHP脚本的执行环境 执行PHP脚本Request Shutdown 这时候调用每个扩大的PHP_RSHUTDOWN_FUNCTION中的办法,清理申请现场,并且ZE开始回收变量、内存 Module Shutdown WEB服务器退出或命令脚本执行结束退出就会调用每个扩大的PHP_MSHUTDOWN_FUNCTION中的办法 单过程SAPI生命周期 CLI/CGI模式的PHP属于单过程SAPI模式。这类申请在解决一次后就敞开 多过程SAPI生命周期 通常PHP是编译为apache的一个模块来解决PHP申请 Apache个别会采纳多过程模式,Apache启动后会fork出多个子过程,每个子过程的内存空间独立,每个子过程都会通过开始和完结环节 每个过程的开始阶段只在过程fork进去当前进行,在整个过程的生命周期内可能会解决多个申请 只有在apache敞开或过程被完结之后才会进行敞开阶段,在这两个阶段之间会随着每个申请反复申请开始-申请敞开环节 多线程SAPI生命周期 ...

May 27, 2022 · 1 min · jiezi

关于php:云原生时代-PHPGolang-项目如何实现微服务

原文:https://wenda.swoole.com/detail/108785 前言在传统架构下,咱们须要应用服务发现、服务注册等技术实现微服务架构。通常咱们须要将服务提供方(Service Provider)的节点(IP:PORT)保留在 ZooKeeper、ETCD、Consul、Nacos 等服务治理组件,服务调用方(Service Customer)能够读取到节点列表,发动 RPC 调用,建设连贯并发送申请、接管响应。 通常咱们须要依赖特定框架的实现,比方 Spring Cloud、Dubble、Hyperf 等框架。在云原生时代实现微服务不再须要这样,咱们能够间接应用 K8s 提供的 Service 来实现微服务架构,将服务注册发现下沉到零碎底层。可靠性更高,稳定性更好,而且是人造跨语言的,Java、PHP、Golang 都能够应用,开发框架也会变得更简略,不须要做任何事件,只须要实现服务的逻辑,监听本机端口即可。 K8s Service 介绍Service 是 K8s 提供的发现后端 Pod 的一种机制,为一组具备属于同一个 Deployment 的所有 Pod 提供了对立的入口地址,将申请进行负载散发到各个 Pod 。 在 K8s 中 Pod 就相当于是 Linux 零碎的过程,是执行应用程序的容器组。如何拜访 Pod 中的服务呢?间接去连贯 Pod 的 IP:Port 必定是不行的,因为它是不稳固的,随时可能会产生调度而重启,Pod 的生命周期是十分短暂的。而 Pod 重启之后 IP 端口会发生变化。一个服务或利用通常会有 1-N 个 Pod,申请 Service 的 IP:PORT 时会主动负载平衡并转发到其中一个 Pod,Service 个别是应用 kube-proxy 和 Linux 内核提供的 IPVS 技术实现。也能够了解为 Service 其实就是一个4层代理,后端是利用的 Pod,在 Service 之前咱们能够设置 Ingress 接入网关,容许从集群内部拜访,个别对外服务的 HTTP 接口就是这个形式。也能够间接应用,只容许外部拜访,这就是微服务模式。 ...

May 27, 2022 · 1 min · jiezi

关于php:PHP点餐系统源码附小程序

 施行在线订购零碎(有时称为虚构订购或非接触式餐桌订购)是将网站转变为客户获取渠道的最佳形式之一。 通过建设本人的电子商务商店,您能够开始承受在线订单。而后,您开拓了一个新渠道来投合新客户和回头客! 源码:c.ymzan.top 在线订购解决方案可用于承受订单,但也可用于当面订购食物,以进步订购过程的效率。如果您的店内销售点/POS 零碎迟缓且效率低下,在线订购平台是一个不错的抉择。 什么是在线订购零碎? 应用在线订购软件,您能够建设一个零碎,让您的餐厅或咖啡馆能够近程承受订单并承受付款 - 在线和面对面。 有了这个零碎,客户只需通过挪动订购拜访菜单。这能够通过扫描二维码或在搜寻栏中输出链接来实现。 一旦您的客户做出抉择,他们就会提交订单并一次性付款。一旦在餐厅端收到订单,剩下的就是将订单带到客户的餐桌上或打包筹备交付。 这大大放慢了整个在线订购过程。所有都通过智能手机进行,而不是与员工一直来回进行。 理解如何应用PHP点餐零碎源码的菜单制作工具构建您本人的在线菜单 在线订购零碎如何运作? 在线订购零碎的操作相似于在线外卖。您的客户在线订购,实现付款,而后能够将他们的食物送到您的商店或在您的商店取货。订购过程很简略: 您的客户在他们的笔记本电脑或手机上浏览您的在线菜单。他们能够在您的商店前(也称为点击并收集)或在家中进行此操作。 他们抉择他们想要订购的货色,并增加任何送货或用餐阐明。 他们通过填写信用卡详细信息间接通过零碎付款。如果您通过电话承受订单,您还能够抉择向他们发送付款链接。 付款失去平安解决,任何设施上都不会存储任何付款详细信息。 您客户的订单会送到他们家,或者他们能够在特定工夫取货。 简略,间接且无接触! 1. 更平安、更衰弱 要从新停业,食品企业须要开设一家商店以满足英国政府的衰弱和平安法规。业主必须放弃社交间隔,应用非接触式订购/付款形式,并确保定期清洁外表。 即便您经营一家小商店,放弃社交间隔也不用感到压力。转向企业在线订购网站意味着走进的新客户能够在店外或店内餐桌上订购和付款。放弃平安间隔很简略。 2. 犯错的空间更小 客户在线订餐的劣势之一是它能够确保价格精确,并且在结账时出错的空间更小。 这是因为顾客须要亲自从菜单上抉择相应价格的商品,以确保始终领取正确的金额。 这对您的业务有一些益处。谬误免费的可能性更小,清理谬误所节约的工夫更少,为安抚客户而发放的收费产品也更少! 3. 更多客户 随着社交间隔的持续,在线订购和领取正变得越来越被承受和期待。如果您的菜单和领取零碎没有任何麻烦,您的老客户就会将您举荐给他们的敌人,并在社交媒体上分享。 只需提供无缝的客户体验,将订单实时发送到后端团队,您就能够减少客户和利润。 4. 进步客户忠诚度 如果您给他们一个持续回来的理由,客户会抉择您的商店而不是竞争对手的商店。平凡的产品可能就是这个起因,但您也能够通过订购应用程序上的处分打算来激励他们的忠诚度。 依据最近的一项钻研,个性化的数字体验也是激励客户一直光顾的好办法。在承受考察的 1000 名客户中,50% 的人示意他们会更换在线体验不佳的品牌,而 73% 的人心愿在线个性化。 借助餐厅在线订购零碎,您能够发送个性化优惠、申请评论以进步您的评分并接管无关您的服务的反馈。 5. 更高的客户收入 咱们晓得,当初有比以往任何时候都更多的客户参加数字产品和服务。 当客户在线订购时,订单价值会减少。那是因为学习在线菜单不同于排队。 客户有更多工夫做出理智的决定。那些有食物不耐受的人能够分明地浏览所有必要的信息并慢慢来。 浏览更多:二维码领取:它们是什么以及如何开始 6.高度可定制 菜单应用程序是高度可定制的,因而您能够轻松宣传您的徽标、品牌色彩或其余使您的业务不同凡响的性能。另外,如果您想在菜单中删除或增加我的项目,您只需登录,进行更改即可实现! 7. 降低成本 应用卡终端,您会看到一些可能会重大升高您的底线的随同费用。小型企业的订购零碎要便宜得多,因为它都是数字化的,而且在许多状况下,惟一的老本是交易的大量处理费。 应用PHP点餐零碎源码收费设置您本人的在线订购零碎 如何开始应用PHP点餐零碎源码的在线订购零碎 抉择在线订购零碎时,最好的后退形式是什么?大多数解决方案都波及网站建设者,这些建设者通常过于简单且过于低廉。 应用PHP点餐零碎源码,您能够收费创立本人的在线商店。此性能具备弱小的性能,容许客户通过二维码或链接查看您的在线菜单,以及订购和领取商品 - 就像一般网站一样! 以下是如何开始应用PHP点餐零碎源码的在线订购零碎: 关上应用程序或仪表板。 单击我的商店,而后单击创立新商店。 增加您的商店名称。 创立新店领取 4. 而后您就能够增加产品及其名称、价格、形容和类别。 5. 增加照片后,您能够将产品保留到图库中。 6. 你当初筹备好了。您曾经在您的在线商店中取得了您的第一个产品! 7.您能够通过点击右上角的分享键来分享您的店铺,您能够通过二维码或链接进行分享。 8. 当客户通过二维码或链接拜访您的商店时,他们将可能在一个屏幕上查看您的所有产品,抉择他们想要订购的产品,而后在线领取。 9. 您将可能看到您的所有订单都通过“订单”局部进入并在它们通过时履行它们。 10. 每笔款项将在一个工作日内存入您的银行账户。 开始应用PHP点餐零碎源码的在线订购零碎 为什么抉择PHP点餐零碎源码的在线订购零碎? 便于应用 PHP点餐零碎源码的挪动应用程序十分易于应用,并且实用于 Android 和 iOS。您能够从笔记本电脑或手机上传产品,直观的设计让您轻松治理在线商店。随着商店的倒退,您能够增加图片、形容、定价并轻松编辑产品。 可定制 您能够增加本人的徽标、品牌和色彩,让您的店铺怀才不遇并与您的其余业务保持一致。无论您是咖啡店还是餐馆老板,您都能够创立一个与您的品牌无缝对接的订单管理系统。 自在 应用PHP点餐零碎源码开设网上商店是收费的。遗记月度合同或高额费用。应用咱们的 ePOS,您只需领取每笔交易 1.49% 的领取处理费。 如何改良我的PHP点餐零碎? 有很多办法能够改善您的在线订购零碎并减少在线订单的数量。以下是一些策略: 让您亲自见到的客户晓得您领有在线订购零碎。 运行并向在线订购的人发送独家优惠。 在社交媒体上推广您的订购零碎。 提供点击并收集。 寻求反馈,以便您晓得须要改良的中央。 为超过肯定金额的订单提供收费送货服务。 容许客户以客人身份结账,因而他们无需注册。 浏览更多对于如何开始预订的信息 像PHP点餐零碎源码这样的收费在线订餐零碎可作为您开始承受在线订单的一站式解决方案,这将帮忙您战败竞争对手。 遗记简单和低廉的网站建设者 - 咱们为您实现所有沉重的工作。最重要的是,它是收费的,只需测试一下就不会失去任何货色! ...

May 26, 2022 · 1 min · jiezi

关于php:Prestashop安装教程2022

这篇Prestashop装置教程解说了:下载安装包、在cloudways主机中创立利用、将安装包解压后通过ftp上传到主机、依据向导装置prestashop、prestashop后盾如何登录以及如何批改登录地址。 本文原文出自:https://loyseo.com/install-pr... 下载prestashop安装包并解压返回prestashop官网,抉择你的身份、输出你的邮箱后,下载安装包。 如图所示,我下载的是1.7.8.6版本,大略70M。 请将安装包解压,你将取得以下文件 在cloudways主机中创立利用开明Cloudways主机,并且记得开明主机时,抉择application为php类型的custom app。 如果你曾经有了cloudways主机,能够按下图所示,创立一个利用 利用类型抉择PHP(Custom PHP),填选利用名称和我的项目后持续 期待利用创立实现后,在applications中找到你创立的利用 点击利用名称进入后,咱们找到利用的url,这是一个长期url,请你肯定先通过domain management性能绑定正式的域名,而后在SSL certificate中装置SSL证书,操作完这些后,再去按上面的教程装置Prestashop。 接下来,记住下图中的DB Name,他是数据库名称,同时,也是这个利用在系统文件中的文件夹名称。咱们在下文中应用FTP时会用到它。 而后,在主机的servers中找到下图所示的内容,也是FTP所需的信息。 通过FTP上传prestashop到主机在你的电脑里装置一个Filezilla的FTP客户端,装置实现后关上它,点击主机图标-新站点,而后抉择协定为SFTP,输出主机的IP,端口设为22,用户名和明码就在上图中,输出实现后,点击连贯。 等到连贯实现后,你将看到如下界面,这示意曾经连贯胜利了。在ftp的右侧是主机中的内容,左侧是你本地电脑里的内容。 在右侧,按下图所示,找到applications,依据上文中提到的DBname,找到它,双击进入,找到public_html,双击进入后,能看到下图里,这个文件夹内有一个index.php文件 接下来在ftp的左侧找到你解压的prestashop文件夹,关上它 持续在ftp左侧面板中,选中解压后的3个文件,右键抉择上传到右侧public_html文件夹内。 当提醒你是否须要笼罩时,点击确定。 而后就是期待上传,下图就是上传胜利后,这3个文件呈现在了服务器的右侧。 有时候上传很快,譬如我是早上8点操作的,根本是秒传胜利,也有人反馈上传很慢,这个跟网络无关,如果你传的很慢,那就等等吧,干点别的再回来看看。 拜访域名,依据向导装置prestashop传完后,咱们在主机里拜访利用的url,如果你曾经绑定了你的域名,间接拜访域名即可进入prestashop的装置向导界面。 拜访域名后,会先进入一个解压页面,解压实现后就进入下图所示的页面。你能够将装置助手的界面改为中文,点击下一步持续。 第二步,批准许可协定,持续 在第三步中,填写店铺名称、主营业务、是否须要装置演示数据、店铺所在国家、是否启动SSL(选是,最好提前在主机里装置好SSL证书)、姓名、邮箱、店铺明码(就是你后盾登录的邮箱、明码,记好了),而后持续下一步。 接下来要配置数据库,请从cloudways主机中,找到以后利用的access details,获取以后利用的数据库名称、登录名和明码,并输出到prestashop的装置助手中。 数据库的表格前缀能够自行定义批改,默认是ps_,你能够改为自定义的内容,譬如dfsdf_,以减少安全性,记得保留开端的_符号。 填完后,点击数据库连贯测试链接,期待链接胜利后,咱们点击下一步持续。 接下来期待数据库表的主动创立 等数据库创立实现后,界面会提醒你去FTP里删除install这个文件夹,已升高平安危险。如果不删除它,即使你拜访网站后盾地址,也会提醒你去删除它。 在去ftp删除之前,你先到主机后盾,在咱们装置的这个店铺利用的治理面板中,找到application settings,进入general标签,在顶部的reset file/folders permissions中,点击一下刷新按钮,刷新一下权限。这样,咱们能力顺利的删除install文件夹。 而后咱们持续回到ftp,找到install文件夹,咱们须要右键点击它,而后删除它即可。 如果你那边还是有局部文件被提醒无权删除,你也能够先取巧操作一下,将install文件夹重命名一下,改为一个乌七八糟命名的文件夹,让他人猜不到即可。 最初,咱们要登录网站后盾。 ...

May 25, 2022 · 1 min · jiezi

关于php:Move-the-blog-to-CSDN

Move the blog to CSDN

May 25, 2022 · 1 min · jiezi

关于php:对接蚂蚁智能客服教程详解

客服_蚂蚁智能客服蚂蚁智能客服产品介绍 - 支付宝开放平台 (alipay.com) 因为提醒很全,基本上跟着提醒操作创立利用 原理上是在蚂蚁智能客服平台上创立一个客服小程序,来外接各种场景实现 CRMEB Java 版本仅仅应用了 H5 场景,挪动端影响到 H5 端 (公众号) 和 app 端先来看看能实现什么?电脑上能够沟通回复支付宝中也能够沟通回复再来看看怎能配置能力玩转客服性能DOC_LINK 开发者核心控制台 - 点击开明蚂蚁智能客服 依据流程一步步走平台上怎么应用生成连贯至此 蚂蚁智能客服增加结束源码附件曾经打包好上传到百度云了,大家自行下载即可~ 链接: https://pan.baidu.com/s/14G-b...提取码: yu27百度云链接不稳固,随时可能会生效,大家放松保留哈。如果百度云链接生效了的话,请留言通知我,我看到后会及时更新~ 开源地址码云地址:http://github.crmeb.net/u/defu Github 地址:http://github.crmeb.net/u/defu 开源不易,Star 以表尊重,感兴趣的敌人欢送 Star,提交 PR,一起保护开源我的项目,造福更多人!

May 18, 2022 · 1 min · jiezi

关于php:your-minimumstability-stable-or-Could-not-find-package-死循环记录

最近本人在开发一个composer包,被这个问题折磨了一天,都开始狐疑人生了。置信这篇记录能够帮忙包开发者省下一天的工夫。 直接了当:检查一下你应用的composer是版本几,如果是1的话请尝试降级到2后再次尝试装置(这里指的不是包的版本,是composer这个软件的版本)。 这段话引起:"这意味着新软件包和旧的未应用的软件包仅在 Composer 2 可见,直到有人装置它们,这时它们也将对 Composer 1 可见。"症状(奇文瑰句版):失常装置因为本人公布的包只有dev-master分支,不指定版本号的话必定会报这个谬误 ” Could not find a version of package * matching your minimum-stability (stable)“。OK,第二次装置指定版本号 composer require packageName(你的包名):dev-master(指定版本)。回车后窗口又弹出 Could not find package。 哇,我间接蒙蔽了,重复查看composer.json尝试有效,公布tag在发版本有效,换源有效,一整天就这样过来了...。几乎了,入睡前脑中有一道金光闪过,会不会是因为composer的版本问题,我记得这玩意这往年公布过一个新版本。抱着试试的心态,关上了电脑...果然还真是。而后我就开始查相干的文章,发现这段话 ”这意味着新软件包和旧的未应用的软件包仅在 Composer 2 可见,直到有人装置它们,这时它们也将对 Composer 1 可见。“ 哇,几乎了。 如果这篇笔记援救了你一天的工夫,请用你的小手给我点个赞。 相干文章:文章

May 17, 2022 · 1 min · jiezi

关于php:ModStartCMS-模块化建站系统-Laravel9-版-v390

ModStartCMS Laravel9 版 V3.9.0 视频音频字段,富文本开源零碎介绍ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场领有丰盛的性能利用,反对后盾一键疾速装置,让开发者能快的实现业务性能开发。 零碎齐全开源,基于 Apache 2.0 开源协定,收费且不限度商业应用。 零碎演示 性能个性丰盛的模块市场,后盾一键疾速装置会员模块通用且残缺,反对残缺的 API 调用大文件分片上传,进度条显示,已上传文件治理弱小的模块扩大性能,所有模块能够无缝集成,反对在线装置、卸载模块欠缺的开发助手,实现模块、主题的的一键创立欠缺的后盾权限治理,反对基于 RBAC 的权限管理系统后盾治理反对应用手机、平板、PC,无论何时何地都可方便管理第三方登录(QQ、微信、微博、支付宝、微信小程序)第三方领取反对(微信、支付宝、支付宝当面付、微信扫码、微信小程序)第三方云存储反对,反对云贮存分片上传(阿里云、百度云、华为云、腾讯云、FTP、七牛云、UCloud、又拍云)第三方短信反对(阿里云、腾讯云、华为云、百度云、253 云通信、聚合、七牛云、融云、赛邮、UCloud、云片、网易云)V3.9.0 版本更新2022 年 05 月 10 日 ModStartCMS Laravel9 公布 v3.9.0 版本,减少了以下 14 个个性: [新性能] 治理日志列表减少管理员字段[新性能] 富文本编辑字段反对插件化性能[新性能] iframe 音讯通信办法,弹窗减少关上回调[新性能] 获取举荐最近内容快捷办法[新性能] 自定义字段疾速操作工具汇合[新性能] 富文本编辑器减少简洁模式,可通过 editorMode () 切换[新性能] 自定义字段减少视频、音频字段类型[新性能] 启用富文本 UEditorPlus[新性能] 富文本过滤新增 HTML5 标签[新性能] 后盾问题反馈调整为新 Tab 显示[新性能] 日志新增 Rotate 个性,防止历史日志沉积[新性能] 级联 Grid 筛选组件 Cascader[系统优化] 文件抉择组件显示款式优化[系统优化] 富文本 HTML 行高显示,大字体显示异样模块市场一键装置零碎内置模块市场,有行业利用、插件、云存储、云短信等功能模块,后盾反对一键装置、启用、禁用、卸载,可疾速搭建属于本人的零碎利用。 功能模块 零碎演示与文档零碎演示:https://cms.demo.tecmz.com/下载试用:https://modstart.com/download码云仓库:https://gitee.com/modstartGithub 仓库:https://github.com/modstart开发者文档:https://modstart.com/doc模块市场:https://modstart.com/store

May 16, 2022 · 1 min · jiezi

关于php:如何检查网站元素

要查看网站由哪些不同元素组成,或者是测量网页里各元素的尺寸,您能够应用浏览器的元素查看工具。每个浏览器启动查看工具的流程不太雷同,接下来咱们逐个看看Chrome、火狐、Opera、IE浏览器的操作方法。 原文出自LOYSEO:https://loyseo.com/how-to-ins... Chrome浏览器只需右键单击网站的任何区域,在右键菜单里抉择查看/Inspect即可关上,你也能够应用键盘快捷键:Ctrl+Shift+I。 如果要查看网页里蕴含的谬误状况,能够点选元素旁边的控制台选项卡查看。 我常常在建外贸网站时,用这个性能来测量页面上图片的尺寸。 还能模仿不同的设施,来浏览网站。 火狐浏览器同样,右键单击页面上的空白区域或抉择一个元素,而后抉择Inspect。此外,您能够应用键盘快捷键 – Ctrl+Shift+C或Ctrl+Shift+Q。 Opera浏览器应用键盘快捷键Ctrl+Shift+I或通过右键单击页面的任何元素,并从菜单中选择查看元素。 IE浏览器右键单击页面并抉择查看元素或按键盘上的 F12 。 本文由专一于外贸建站的LOYSEO 公布

May 15, 2022 · 1 min · jiezi

关于php:一个Web-Service例子

PHP Web Service在开始实例前,咱们须要确定PHP是否装置了 SOAP 扩大。查看 phpinfo,呈现以下信息表明曾经装置了 SOAP 扩大:在这个例子中,咱们会应用 PHP SOAP 来创立一个简略的 Web Service。 服务端 Server.php 文件代码如下: <?php // SiteInfo 类用于解决申请Class SiteInfo{ /** * 返回网站名称 * @return string * */ public function getName(){ return "菜鸟教程"; } public function getUrl(){ return "www.runoob.com"; }}// 创立 SoapServer 对象$s = new SoapServer(null,array("location"=>"http://localhost/soap/Server.php","uri"=>"Server.php"));// 导出 SiteInfo 类中的全副函数$s->setClass("SiteInfo");// 解决一个SOAP申请,调用必要的性能,并发送回一个响应。$s->handle();?>客户端 Client.php 文件代码如下: <?phptry{ // non-wsdl形式调用web service // 创立 SoapClient 对象 $soap = new SoapClient(null,array('location'=>"http://localhost/soap/Server.php",'uri'=>'Server.php')); // 调用函数 $result1 = $soap->getName(); $result2 = $soap->__soapCall("getUrl",array()); echo $result1."<br/>"; echo $result2;} catch(SoapFault $e){ echo $e->getMessage();}catch(Exception $e){ echo $e->getMessage();}

May 12, 2022 · 1 min · jiezi

关于php:PHP74-jsonencode-造成float数据精度异常情况

解决办法:批改php.ini里的serialize_precision的值为-1 即可;而后重启下开发环境 serialize_precision = -1事件起因:在用laravel开发接口时,发现数据库中的数据是3.9,但“return success($price);”时却是返回“3.8999999999999999”; $price = 3.9;return success($price);//输入3.8999999999999999这个就呈现了精度问题,但应用laravel自带的dd办法后,发现 $price = 3.9;dd($price);//输入3.9由此能够判断是return 的时候,json_encode出的问题,于是以下代码验证 $price = 3.9;echo json_encode($price);//输入3.8999999999999999于是搜寻了很多半天,才找到了解决办法。我本地的serialize_precision值是17,须要改成 -1;而后重启开发环境后,再次输出以下代码 $price = 3.9;echo json_encode($price);//输入3.9感激以下文章的作者分享他的内容,我的问题才得以解决。 https://blog.csdn.net/moliyir...

May 12, 2022 · 1 min · jiezi

关于php:ModStart做好用的开源框架率先支持IP属地功能

近日,微博、抖音全量上线IP属地性能,即国内显示到省份/地区,国外显示到国家,用户无奈敞开该性能。一时间,各种“人在美国”“人在日本”的网红无处遁形。 据介绍,这次要是为了缩小假冒热点事件当事人、歹意辟谣、蹭流量等不良行为,确保流传内容的实在、通明。 ModStart模块商城第一工夫也反对了IP属地性能,能够帮忙企业在应用评论等性能时反对IP属地性能。 ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场领有丰盛的性能利用,反对后盾一键疾速装置,让开发者能快的实现业务性能开发。 零碎齐全开源,基于 Apache 2.0 开源协定,收费且不限度商业应用。

May 11, 2022 · 1 min · jiezi

关于php:PHP-FFI-实现list

本文通过PHP FFI个性初步实现了list链表 <?php// php 字符串转C char指针function stringToCharPtr(string $str){ $strChar = str_split($str); $c = FFI::new('char[' . count($strChar) . ']', false); foreach ($strChar as $i => $char) { $c[$i] = $char; } return FFI::cast(FFI::type('char *'), $c);}class FFIHelper{ private static $ffi; public static function create() { if (empty(self::$ffi)) { self::$ffi = \FFI::load("./test.h"); } return self::$ffi; }}class StringArray{ private $char; private $capacity; private $length; public function __construct(int $capacity = 0) { if ($capacity > 0) { $this->create($capacity); } } /** * 创立list */ public function create(int $capacity) { if (!is_numeric($capacity) || $capacity <= 0) { throw new \Exception("list长度不能够为0"); } $this->char = \FFI::new ('char*[' . ($capacity) . ']', false, true); $this->capacity = $capacity; } public function append($string) { $postion = $this->length; if ($postion >= $this->capacity) { $this->grow($this->capacity * 2); } $this->char[$postion] = stringToCharPtr($string . "\0"); $this->length++; } public function get($postion) { return $this->ArrayList->data; } public function delete($postion) { if ($postion < 0) { throw new \Exception("删除地位不能够小于0"); } if ($postion > $this->ArrayList->length) { throw new \Exception("删除地位大于list长度"); } } public function length() { return $this->length; } /** * 减少数组长度 */ public function grow($size) { if ($size < $this->capacity) { throw new \Exception("无需减少list容量"); } $oldData = $this->char; $newData = \FFI::new ('char*[' . ($size) . ']', false, true); \FFI::memcpy($newData, $this->char, \FFI::sizeof($oldData) * $this->length); $this->char = $newData; $this->capacity = $size; \FFI::free($oldData); } public function getList() { return $this->char; } public function __destruct() { }}$star_memory = memory_get_usage();$start = microtime(true);$list = new StringArray(2000000);$i = 0;$data = [];while (true) { $list->append("hello 你好"); //$data[] = "aaas你好" . $i; $i++; if ($i > 1000000) { break; }}//var_dump(FFI::string($list->get(0)));$end_memory = memory_get_usage();$elapsed = microtime(true) - $start;echo "That took $elapsed seconds.\n";var_dump((($end_memory - $star_memory) / 1024 / 1024) . "M");因为PHP底层字符串做了解决,雷同字符串会只存一次,通过计数器的形式来示意援用的次数,而本文中实现的字符串并未进行认为解决。因此,每次都会从新创立新的字符串。 ...

May 11, 2022 · 2 min · jiezi

关于php:ModStartCMS-模块化建站系统-v390

ModStartCMS V3.9.0 视频音频字段,富文本开源零碎介绍ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场领有丰盛的性能利用,反对后盾一键疾速装置,让开发者能快的实现业务性能开发。 零碎齐全开源,基于 Apache 2.0 开源协定,收费且不限度商业应用。 性能个性丰盛的模块市场,后盾一键疾速装置会员模块通用且残缺,反对残缺的API调用大文件分片上传,进度条显示,已上传文件治理弱小的模块扩大性能,所有模块能够无缝集成,反对在线装置、卸载模块欠缺的开发助手,实现模块、主题的的一键创立欠缺的后盾权限治理,反对基于RBAC的权限管理系统后盾治理反对应用手机、平板、PC,无论何时何地都可方便管理第三方登录(QQ、微信、微博、支付宝、微信小程序)第三方领取反对(微信、支付宝、支付宝当面付、微信扫码、微信小程序)第三方云存储反对,反对云贮存分片上传(阿里云、百度云、华为云、腾讯云、FTP、七牛云、UCloud、又拍云)第三方短信反对(阿里云、腾讯云、华为云、百度云、253云通信、聚合、七牛云、融云、赛邮、UCloud、云片、网易云)V3.9.0版本更新2022年05月09日ModStartCMS公布v3.9.0版本,减少了以下14个个性: [新性能] 治理日志列表减少管理员字段[新性能] 级联Grid筛选组件Cascader[新性能] 富文本编辑字段反对插件化性能[新性能] iframe音讯通信办法,弹窗减少关上回调[新性能] 获取举荐最近内容快捷办法[新性能] 自定义字段疾速操作工具汇合[新性能] 富文本编辑器减少简洁模式,可通过 editorMode() 切换[新性能] 自定义字段减少视频、音频字段类型[新性能] 富文本过滤新增HTML5标签[新性能] 后盾问题反馈调整为新Tab显示[新性能] 日志新增Rotate个性,防止历史日志沉积[新性能] 启用富文本UEditorPlus[系统优化] 文件抉择组件显示款式优化[系统优化] 富文本HTML行高显示,大字体显示异样模块市场一键装置零碎内置模块市场,有行业利用、插件、云存储、云短信等功能模块,后盾反对一键装置、启用、禁用、卸载,可疾速搭建属于本人的零碎利用。 零碎演示与文档零碎演示:https://cms.demo.tecmz.com/下载试用:https://modstart.com/download码云仓库:https://gitee.com/modstartGithub仓库:https://github.com/modstart开发者文档:https://modstart.com/doc模块市场:https://modstart.com/store

May 10, 2022 · 1 min · jiezi

关于php:开源之夏-2022-重磅来袭欢迎报名-Casbin社区项目

**01流动简介** “开源之夏(英文简称 OSPP)” 是中科院软件所 “开源软件供应链点亮打算” 领导下的一项面向高校学生的暑期流动,由中国科学院软件研究所与 openEuler 社区独特举办。 2022 年为此系列流动的第三届,开源之夏旨在激励在校学生积极参与开源软件的开发保护,促成优良开源软件社区的蓬勃发展。流动联结各大开源社区,针对重要开源软件的开发与保护提供我的项目,并向寰球高校学生凋谢报名。 学生可自主抉择感兴趣的我的项目进行申请,并在当选后取得该软件资深维护者(社区导师)亲自领导的机会。依据我的项目的难易水平和实现状况,参与者还将获取开源之夏流动奖金和结项证书。 Casbin 开源社区参加我的项目曾经公布,欢送各位同学报名! **02社区简介** Casbin是一个弱小的、高效的开源访问控制框架。波及到Go, Java, Node.js, Javascript (React), Python, PHP, .NET, C++, Rust等多种语言。Casbin由北京大学罗杨博士创建于2017年,外围保护团队有数十人。Casbin在业界具备宽泛影响力。目前曾经被Intel、VMware、Orange、RedHat、T-Mobile等公司开源应用,被腾讯云、Cisco、Verizon等公司闭源应用。具体详见Casbin主页。Casbin Go主我的项目目前GitHub 9000+ stars,加上所有语言的实现、插件等可达到15000+ stars。 **03我的项目概览** **04我的项目具体介绍** 本次Casbin社区凋谢6个我的项目,欢送对Casbin感兴趣的同学报名加入。 | 我的项目一:Casdoor单点登录社区零碎(前端React + JS,后端Go) 我的项目形容:Casdoor是一套基于基于OAuth 2.0 / OIDC协定的对立身份认证(单点登录)零碎。其反对多种第三方登录形式,如QQ、微信、Google, GitHub等。Casdoor具备Web治理界面,能够用来治理用户、角色、权限(基于Casbin)。Casbin社区目前采纳QQ群(中文),Gitter(英文)进行社区交换,交换渠道比拟无限。咱们打算开发一个同时面向Casbin开发者和用户的官网社区:casnode(https://github.com/casbin/cas... ),并采纳Casdoor单点登录零碎来对接。 项目编号:225080161我的项目详情:https://summer-ospp.ac.cn/#/o...对应 GitHub 仓库:https://github.com/casdoor/ca...https://github.com/casbin/cas... | 我的项目二:Casbin外围权限库改良 我的项目形容:Casbin采纳独特的PERM模型语法(model)来实现弱小、灵便的访问控制。Casbin Golang版本作为Casbin的第一个语言实现,领有最多的用户以及最先进的feature。咱们心愿在Casbin Golang上:1)加强Casbin语法的表达能力,满足用户多样化的策略制订需要;2)优化Casbin在大规模规定集上(百万以上)的策略评估性能。jCasbin是Casbin的Java版本,它须要及时跟踪Golang Casbin主库的最新feature并移植到Java版本中来。同时保护Java特有的生态。 项目编号:225080166我的项目详情:https://summer-ospp.ac.cn/#/o...对应 GitHub 仓库:https://github.com/casbin/casbinhttps://github.com/casbin/jca... | 我的项目三:Casbin权限库及SDK改良(.NET + Go) 我的项目形容:Casbin采纳独特的PERM模型语法(model)来实现弱小、灵便的访问控制。Casbin Golang版本作为Casbin的第一个语言实现,领有最多的用户以及最先进的feature。咱们心愿在Casbin Golang上:1)加强Casbin语法的表达能力,满足用户多样化的策略制订需要;2)优化Casbin在大规模规定集上(百万以上)的策略评估性能。Casbin.NET是Casbin的.NET版本,它须要及时跟踪Golang Casbin主库的最新feature并移植到.NET版本中来。并保护.NET特有的生态。 项目编号:225080216我的项目详情:https://summer-ospp.ac.cn/#/o...对应 GitHub 仓库:https://github.com/casbin/casbinhttps://github.com/casbin/Cas...https://github.com/casdoor/ca... | 我的项目四:Python/PHP-Casbin在分布式系统和支流框架下的利用扩大开发 我的项目形容:对分布式存储系统ETCD的适配etcd-adapter欠缺Py/PHP-Casbin的对Redis(redis-adapter)适配器;引入Casbin外围引擎Casbin Core Engine (Golang)中的新性能;对支流框架的反对加强,例如:如果在Python的Django的扩大中, 须要引入Django的Middleware, Caching, Logging, 集成Django的认证零碎(authentication system);而PHP支流框架Laravel中已有Laravel-Authz,但须要引入Laravel的Gates等。解决PyCasbin或PHP-Casbin主库以及相干仓库中的issues。 ...

May 9, 2022 · 1 min · jiezi

关于php:Google-Summer-of-Code谷歌编程之夏活动流程全解析上

本期由尔等同学来对话Casbin罗杨老师,为大家介绍开源及GSoC流动流程。 > 罗杨:GSoC 2013、2015学生。GSoC期间在Nmap开源社区作为主力开发了Windows平台网络抓包工具Npcap。在此之后,建设了本人的开源我的项目Casbin。2019 年,因其在Casbin、Npcap和Nmap方面的工作被授予Google Open Source Peer Bonus的处分。该奖由Google设立,用于处分寰球各地踊跃推动开源软件倒退的优良贡献者。目录 加入开源最大的播种是什么?开源社区是什么样的个人?一份好的申请书中应该蕴含哪些内容?如何对待有些同学想同时参加GSoC、OSPP、比特之夏等开源流动?您感觉加入开源最大的播种是什么?首先我感觉首先我比拟侥幸,在2013年,同学给我介绍了这个GSoC流动,起初我就误打误撞的加入了,而后就入选了,从而才接触开源,我感觉整个流程其实是充斥着运气成分的。因为如果过后那个同学没有告诉我,可能到当初为止十来年,我都与开源没有关系。 我在做开源的过程中,我发现其实我非常适合开源这个理念。因为开源这个货色,他并不是适宜每一个人,他是适宜特定品种的一个人去加入,所以说肯定要辨别本人适不适宜开源。 我在2013年加入的Nmap社区,作为GSoC2013的学生,而后我理解到这种国内顶尖的开源软件,它可能做成什么样子。 Nmap社区:https://nmap.org/ Nmap(“网络映射器”)是一个收费和开源的用于网络发现和平安审计的实用程序 第一次加入GSoC时,我还是一个在读研究生。在咱们国内高校去读研究生,比方在学校里波及到的我的项目,或者说本人业余搞的我的项目,其实大部分程度是比拟无限的。包含咱们本人做的一些我的项目,或者说一些练手的我的项目,当真正放到市场上,其实是没有什么竞争力的。 然而,如果你在开源社区做奉献,尤其是抉择了一个比拟风行、当初还比拟沉闷的、比拟热门的开源社区,你做的其实是First Class的工作。接触到的是这种第一流的开源软件,你能接触到的用户也是第一流的,社区的开发者、包含你的mentor其实也是属于第一流的,是能够与BAT等量齐观的水准,在整个参加过程中你能学到很多。比如说我过后做的这个Npcap抓包工具。它至多目前在Windows网络抓包畛域依然是No. 1的软件。我感觉参加开源有一点很重要,你的代码可能施展十分大的价值,你能造福寰球很多人,你的代码会被百万级别的调用,也会被后来者批改焕发出新的荣耀。 您感觉开源社区是什么样的个人?其实当初有很多不同的开源社区,首先有国外的社区也有国内的社区,尤其是这几年国内的开源倒退得也很好。国内社区里学生和导师沟通会更容易一些,很多事件可能用中文就解决了。当然也有很多国外的社区,他们可能更老派一点,各种基础设施可能会比拟传统,比方用邮件列表这种传统的形式。有的历史比拟新的社区,比如说像咱们Casbin社区,咱们个别用QQ、微信、Google Talk、Gitter等即时通信工具比拟多。尤其是单方都是国人时,就没必要去用英文去写个邮件。而后呢,咱们对效率也非常重视,除非是长篇的技术探讨,咱们可能会通过GitHub等模式去沟通。 还有一些基金会下的社区,像当初比拟闻名的Apache基金会,还有Linux基金会,CNCF基金会。基金会下的社区都是十分好的,因为自身他有基金会的模式在外面,所以他的各方面都会更成熟、更标准一些,你能学到很多行业内的典型实际。 另一部分开源社区,背地是有商业公司在经营。抉择这个类型的开源社区参加的劣势在于将来毕业找工作,如果你加入过这个社区的流动,那你可能比他人优先拿到这个商业公司的校招Offer。 而咱们Casbin社区,目前就是一个纯社区的经营模式,它自身会更自在一些。在社区里大家都是平等的开发者。咱们的指标就是独特把这个社区做好。咱们社区的运作以提高效率为优先,各种规章制度比拟灵便,社区治理方面尽量采纳全自动化的基础设施,比方所有仓库均采纳semantic-release语义化版本,尽量减少开发者的累赘,将精力更多地集中在代码层面。 这个其实跟咱们同学毕业去找工作很类似,毕业之后是去大公司还是小公司的问题。大公司各方面规章制度很全,能失去一个比拟残缺的锤炼,然而它的灵活性有余,你能做的事件可能就是很渺小的一部分,因为每一个货色都有标准,通知你去怎么做,你能施展的空间就小;相比之下,小公司它的制度可能没那么健全,然而各方面会比拟灵便,如果你是一个很有翻新想法、执行力又很强的人,那或者后者会更适宜你。 您感觉一份好的申请书中应该蕴含哪些内容?我感觉首先应该蕴含你的个人简历上的一些内容,比如说姓名、联系方式、学校、学历、技术栈等信息,我感觉这些还是须要列出来的。 我感觉很重要的一个点就是技术栈,因为GSoC工夫说长不长,说短不短,如果一个同学当初只会C++,然而他要加入一个Java为次要语言的我的项目,他是很难在短时间内去超过一个始终做Java的同学的。所以集体技术栈匹配就很重要,尤其是在接触工夫比拟短、大家还没有理解你时,这就很重要。 第二点就是说你针对这个idea的一些构想。idea中个别都会列出有几个task,那么每一个task你是怎么去想的?怎么去实现它?这个首先要求你对这个我的项目有肯定的理解,因为如果你不理解,你是不可能写进去的。相当于你要做一个将来的布局,表述分明这三个月大略怎么去开发。而后每一部分把大的工作都拆解成小的工作,给它们调配适合的工时。甚至说你可能提前参加到社区奉献中,可能实现了一些小的Issue,提了一些PR,这些也都能够列进来。 第三点是文章篇幅,篇幅其实也不必特地长,就是有些同学他可能写起来就几十页,这种其实也没有必要。我集体认为能够写短一点,比如说4、5页的样子,其实就差不多了。当然如果有贴图的话,能够略微多一些。最重要的还是你做Coding的能力,GSoC其实自身考查的就是做代码奉献的能力,所以说次要还是去展示这个能力,而不是说我去写一份完满的Proposal,这就轻重倒置了。Proposal只是体现代码能力的一个说明书。 与GSoC同时间段举办的流动还有OSPP、比特之夏,有些同学想加入多个流动,您是怎么对待这种状况的?最近几年其实有呈现了很多相似于这种GSoC的流动,像咱们国内这个办的十分好的OSPP,以及比特币的那个比特之夏,还有像印度,他们有GSSOC(GirlScript Summer of Code),其实也是模拟的GSoC的流动模式。 OSPP,中科院暑期之夏开源流动,Casbin社区也本次有幸入选。 https://summer-ospp.ac.cn/#/h... 所以当初有很多流动能够供大家来抉择,有些同学可能在想,要不要同时加入多个流动来刷刷经验?首先我集体认为,对于绝大多数同学,可能不太适宜去同时去加入多个流动,能够从两方面来探讨这个问题。 第一,工夫调配。因为每一个流动,都提出了工夫上的要求。尽管不是强制要求花多少工夫在这个下面,然而依据咱们的教训,想要做好的话,均匀每个同学其实还是要拿出每天4-5个小时来去做这个事件。所以对于技术实力没那么强的同学来,他同时加入两个以上的我的项目,压力会比拟大,尤其是两个我的项目可能还是齐全不一样的畛域,比方一个是Linux内核相干的,另外一个是Web利用相干的,这两个我的项目其实就齐全没有穿插,是两套齐全不一样的常识体系,最初会把本人搞得很累。这类流动,其实初衷还是为了吸引更多的同学参加到开源世界中,并逐步酷爱上开源,在开源世界中自我成长。但最终如果把本人搞得很累,变成了打工挣一份辛苦钱,失去了乐趣,流动完结后甚至感觉开源这个事儿不好,再也不参加,其实反而违反了这些开源流动的初衷。 第二,我想从导师、社区、招聘者这个角度来分享下,因为Casbin社区也加入GSoC,社区也有Casbin Talent明日之星这种本人的流动。我也看过不下千份简历。对于这些简历,从我的角度来讲,如果说一个同学同时加入了两个这样的流动,比如说加入了一个GSoC,而后又加入了一个别的流动,如果这两个流动中做的我的项目内容、难度差不多,那两段经验是没什么区别的,做出的奉献也是差不多的,这些经验其实在我的思维中会主动合并成一个,不会有额定加分。很多面试官、招聘者,会把简历上过来雷同的、类似的经验进行合并。比如说一个同学去阿里实习过,而后另一个同学在百度、阿里、腾讯、美团都实习过,两个同学的差距可能并不大。因为有能力去阿里,那阐明这位同学有足够去BAT实习的能力。那再去其余公司实习,其实也并没有证实他的实力是要显著强于只有一段雷同等级实习的同学的。它只是证实达到了那个高度,然而反复地换山头,这些山头还都在同一个高度,其实是没有意义的。不如在这个高度根底上持续攀登,或者说在另一个方面去达到一个新的高度。 第三,我想从做开源这件事自身来思考。我本人也加入过两次GSoC,两年我做的是同一个我的项目。尽管那个时候我都曾经去念博士了,我也没有换社区,也没有换我的项目,我只是想把一件事件做到极致。这个我的项目通过这两轮GSoC后,我又在Nmap社区做了一年的带薪开发,最终咱们把这个我的项目孵化得很好。到当初它可能真正成为某个畛域No. 1的软件,在寰球有上百万的人去应用。我常常在各种场合,看到他人的电脑上装了这个软件,我会很骄傲地跟他们说,这个软件是我开发的,这就是一种影响力的体现。换句话说,与其去开发100个不出名的、没有人用的软件,不如只开发一个软件。兴许这个软件很小,然而它在每个人的电脑上都装置或者应用了,那么做的这件事件影响力就十分大,所以,还是要看重软件的品质,而不是看数量。 序幕尔等同学:理解前人的经验能够更好的帮忙咱们这些后来者做出适合本人的抉择,非常感谢罗老师给咱们分享他的开源经验,本期采访为上半局部,还有下半局部敬请期待。(情谊提醒:点点关注不迷路~)

May 7, 2022 · 1 min · jiezi

关于php:微信公众号网页授权多域名解决方案

一个公众号的域名受权数量是无限的,如果一个公众号须要绑定多个域名时怎么解决呢?这时候就须要用到域名直达实现微信受权域名直达实例微信受权回调域名(直达域名):www.test.com须要受权回调域名1:www.test1.com须要受权回调域名2:www.test2.com在直达域名www.test.com目录下新建index.php,test1.php,test2.php三个文件在index.php中编写发动受权代码 if(isset($_GET['type']) && !empty($_GET['type'])){ //发动受权 $appId = "微信APPID"; $redirectUrl = $_SERVER['REQUEST_SCHEME'] . '://'. $_SERVER['SERVER_NAME'] . '/' . $_GET['type'] . '.php'; $codeUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appId."&redirect_uri=".urlencode($redirectUrl)."&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"; header("location: ".$codeUrl); die;}else{ echo "no";}在test1.php中编写获取受权信息并跳转业务地址(www.test1.com) if(isset($_GET['code']) && !empty($_GET['code'])){ $code = $_GET['code']; $url = "http://www.test1.com/"; header("location:".$url."?code=".$code);}else{ echo 'no';}在test2.php中编写获取受权信息并跳转业务地址(www.test2.com) if(isset($_GET['code']) && !empty($_GET['code'])){ $code = $_GET['code']; $url = "http://www.test2.com/"; header("location:".$url."?code=".$code);}else{ echo 'no';}依据如上形式就能够实现微信受权域名直达拜访 www.test1.com 站点时只需拜访 www.test.com?type=test1 即可拜访 www.test2.com 站点时只需拜访 www.test.com?type=test2 即可

May 7, 2022 · 1 min · jiezi

关于php:加密访问资源方法总结

在有些状况下咱们须要对咱们服务器上的资源进行加密拜访,那么咱们须要如何来实现呢?1. 批改nginx配置批改nginx配置,将须要加密拜访的资源设置为禁止内部拜访 # 资源实在存储门路 /upload 禁止内部间接拜访location ^~ /upload { internal;}设置拜访不存在资源时,跳转到指定的php脚本进行解析 # 如果文件不存在,则rewrite到PHP脚本文件进行解决if (!-f $request_filename) { rewrite ^/.*$ /attachment.php;}依据如上配置nginx实现资源加密拜访实例 # 图片实在存储门路 /upload 禁止内部间接拜访location ^~ /upload/school { internal;}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${ # 如果文件不存在,则rewrite到PHP脚本文件进行解决 if (!-f $request_filename) { rewrite ^/.*$ /attachment.php; } expires 30d; error_log /dev/null; access_log /dev/null; }2. attachment.php(资源解析脚本)<?php// key参数为校验参数,有该参数即可通过验证,否则不通过if (!isset($_GET['key'])) { exit('get img failed!');}//key验证逻辑$imagePath = $_SERVER['DOCUMENT_ROOT'] . '/upload/';$image = $_SERVER['REQUEST_URI'];// 拼接图片实在全门路$fullPath = $imagePath . $image;// 获取图片mime信息 设置Content-type头$mime = getimagesize($fullPath)['mime'];header("Content-Type: $mime");// 设置sendfile头部,让nginx跳转到download下查找对应图片 相当于交给nginx进行后续解决header("X-Accel-Redirect: /upload/$image");die;依据如上就能够实现资源秘密拜访,最总实现成果如下(站点域名为:www.test.com)-- 例如资源实在地址为:/upload/test.jpg-- 拜访 www.test.com/upload/test.jpg 失败-- 拜访 www.test.com/test.jpg 失败-- 拜访 www.test.com/test.jpg?key=XXX 胜利

May 7, 2022 · 1 min · jiezi

关于php:PHP-实现平滑关闭重启

写过 CLI 常驻过程的老司机必定遇到过这么一个问题:在须要更新程序的时候,我要怎样才能平安敞开老过程?你可能会想到 NGINX、php-fpm 之类的平滑重启是给过程发送 USR2 信号,而后它就会将以后申请解决完再退出。 但过程是怎么接管信号、解决信号,预计就不是很多人能说分明了。 原理要实现平滑敞开/重启不难,这里先解说两个知识点: 阻塞信号当咱们的程序正在解决一个工作的时候,你必定不心愿它中途被终止,比如说你在执行一个数据库事务,必定不心愿事务还没被提交过程就被终止了。 <?phpecho "开始执行事务" . PHP_EOL;// 模仿一些耗时的操作$finish_time = time() + 5;while (time() < $finish_time) {}echo "事务执行结束" . PHP_EOL;下面这段代码,如果你在第二个 echo 之前用 kill 命令去杀死这个过程,那么第二个 echo 就不会被执行了。那能不能做到在事务过程中临时先疏忽 kill 信号呢? 能。咱们能够应用 pcntl_sigprocmask() 来阻塞信号,让事务实现之后再响应 kill 信号。 <?php// 阻塞信号$sig_set = array(SIGINT, SIGTERM); // 要阻塞的信号汇合pcntl_sigprocmask(SIG_BLOCK, $sig_set); // SIG_BLOCK: 把信号退出到以后阻塞信号中echo date("[Y-m-d H:i:s]") . " 开始执行事务" . PHP_EOL;$finish_time = time() + 5;while (time() < $finish_time) {}echo date("[Y-m-d H:i:s]") . "事务执行结束" . PHP_EOL;pcntl_sigprocmask(SIG_UNBLOCK, $sig_set); // SIG_UNBLOCK: 从以后阻塞信号中移出信号同样的,在第二个 echo 之前按下 Ctrl + C 或者用 kill 命令去杀这个过程,你会发现第二个 echo 失常执行了,并且两条输入的工夫距离是 5 秒。 ...

May 6, 2022 · 2 min · jiezi

关于php:使用-Swoole-加速你的-CMS-系统并实现热更新-基于-Laravel-框架

主题:应用 Swoole 减速你的 CMS 零碎,并实现热更新 对于 Swoole 的简介不再在此赘述,各位能够自行查看官网的文档进行具体的理解。 本文以 MyCms 为例,简要阐明 Swoole 联合传统的 CMS 零碎进行应用,并实现热更新。 CMS零碎:MyCms (目前v3.3+以上版本从新编写了对 Swoole 的反对,移除了包swooletw/laravel-swoole。 应用新版本的用户间接装置后批改Nginx配置即可) 集成 Swoole 问题: 1、系统配置更新后无奈实时读取 2、URL 别名生成后拜访 404 3、插件装置呈现问题 4、批改PHP文件后不失效 以上问题必须手动重启 swoole 能力失效 性能解决实现: 1、系统配置缓存更新后自行重载热更新 2、URL 路由别名缓存生成后自行重载热更新 3、插件装置/卸载后自行重载热更新 4、PHP 文件批改后,能够通过后盾革除缓存进行热更新 Swoole 拓展包 见 MyCmsExpand / Swoole文件夹及根目录 swoole.php 次要文件阐明: 1、swoole.phpswoole 服务治理入口文件 2、Expand / Swoole / MySwoole.php服务治理外围文件 3、Expand / Swoole / config.php参数配置文件 4、Expand / Swoole / reset须要重置的服务(session) Swoole 热更新外围 确认 onWorkerStart 及之前的操作没有加载须要热更新的文件,如果加载了就无奈进行热更新 ...

May 5, 2022 · 1 min · jiezi

关于php:PHP-实现守护进程

写 PHP CLI 程序的老司机们可能常常会写一些常驻过程,比方音讯队列消费者过程,这些过程会始终运行,除非要发版,不然个别不会重启的,所以程序程序是不可能由咱们通过 ssh 登录到服务器上通过终端来间接启动的(因为一旦断开 ssh 过程就退出了),常见的做法就是用 systemd 或者 supervisor 来使其成为 守护过程,这样过程就能够始终运行,遇到谬误意外退出也能被主动重启。 好学的你可能会思考守护过程到底是怎么实现的?为什么有的程序既能够本人就成为守护过程,又能够通过 systemd 来后盾运行?如果不依赖内部,咱们的 PHP 程序该怎么变成守护过程呢? 成为守护过程的步骤其实只须要创立子过程并退出父过程,将要解决的工作在子过程中进行就能够实现一个守护过程了。然而仅仅是这么做的话,如果后续工作很简单,或者引入了一些第三方包,那么可能就会呈现奇奇怪怪的问题了。 而在《UNIX环境高级编程》(英语:Advanced Programming in the UNIX Environment,简称APUE)一书中有介绍对于守护过程的编码标准,咱们依照标准来实现咱们的守护过程就能够避免出现那些奇怪的问题了。而且标准也不简单,只须要几步就能够了: 创立子过程,退出父过程子过程创立一个新的会话并成为 session leader重设文件掩码扭转工作目录敞开规范输入输出实现<?phpfunction daemon(){ // [1] 创立子过程 $pid = pcntl_fork(); if ($pid == -1) { die('fork failed'); } // [2] 如果是父过程,则退出 if ($pid > 0) { exit(0); } ///////////////// 以下是子过程 ///////////////// // [3] 创立一个新的会话并成为 session leader if ( ($sid = posix_setsid()) <= 0 ) { die("Set sid failed.\n"); } // [4] 重设文件掩码 umask(0); // [5] 扭转工作目录 if (chdir('/') === false) { die("chdir failed.\n"); } // [6] 敞开规范输入输出 fclose(STDIN); fclose(STDOUT); fclose(STDERR);}daemon();// ... 真正的解决逻辑阐明下面短短的十几二十行代码就实现了一个守护过程,接下来解释一下有些步骤为什么要这么做。 ...

May 5, 2022 · 1 min · jiezi

关于php:海外电商支付网关避坑指南

前言Hi,各位朋友,我是CrazyCodes 上一篇我大抵形容了领取零碎开发的根本流程,但相比之下,国内的流程尽管大同小异,但必要步骤还是残缺的,技术水平比拟高,但相比之下,对接海内的三方领取就没有咱们设想的那么通顺了。 本章还是依照失常流程,付款、告诉(包含同步告诉、异步告诉)、查问、退款以及对账这几个根本步骤来阐明与海内的区别。 倡议配合 浅谈领取零碎开发根本流程 文章了解差别点 付款 上图是一个残缺的付款流程,与海内领取的特殊性相比拟的话,有以下几个点 三方确认领取可能不是实时的,这里这个不实时代表的不是分钟级,而可能是小时或者是以天为维度的,为啥提早这么大,这个我就不分明了,可能是链路长,或者技术倒退程度问题,当然这也是局部国家,相似英国、法国这些比较发达的国家,一般来说流程还是挺失常的。例如台湾的超商领取,能够了解为是一种线下领取形式,大抵流程是用户在网站高低单后,我方只可能提供用户一个领取码,用户需拿着这个领取码去线下门店付款,最终实现交易,这种形式在我方付款的这个流程上,只能是实现一个付款前置的性能,付款过程在线下。其次咱们不应信赖任何零碎与用户操作,何况是海内,货品或资金的追回更加艰难,所以要做各种校验,有时海内三方零碎没有校验的性能,可能会产生欺诈行为,咱们能够通过三方提供的附加参数(相似于订单形容)增加上校验码,当然,如果连这个也没有的话,只能事在人为了。最初是对于订单号的问题,就是局部三方零碎订单号可能不反对幂等,这意味着当用户应用某个订单号发动领取在并未付款后,再次用这个订单号发动领取时就会失败,遇到这种状况时,咱们能够应用一个订单号对应多个交易号去解决,意味着每次发动后生成一个惟一的交易号,作为订单号的替补,去进行领取。告诉 付款都如此艰难,那么告诉更是难上加难,列出几个比拟外围的差别点 首先可能没有任何告诉,那么没有任何告诉的状况下,咱们只能通过被动查问的形式去获取付款后果又可能是短少一种一类告诉,短少同步告诉,或者异步告诉,个别都是短少异步告诉,短少异步告诉的话,如果你零碎认为能够齐全信赖同步告诉的话,能够选择性疏忽这个缺点,如果有同步+被动查问,集体认为的确能够选择性疏忽,如果没有被动查问的接口,那就须要询问三方零碎是否能够提供对账的接口,总而言之,就是要做到信息对称,才能够认定付款胜利。最初一种最奇葩,虽说是一个线上付款的流程,但可能三方零碎并没有被动查问接口、同步告诉、异步告诉和对账接口,你没有看错,除了一个付款,啥子都没有,这种状况下,个别三方会提供给你一个能够手动下载账单的商户后盾,而后嘞,只能通过导入表格的形式去校验了,这比拟相似于国内的银行卡转正或者公对公。退款 经验了复杂多变的付款后,再来看看退款的一些差别 首先是没有退款接口,这就意味着用户只能去找三方退款,三方再从对账单中体现进去某个订单的状态。其次就是可能没有退款的异步告诉,那么咱们只能应用被动查问的形式去验证订单状态,这又回到了没有接口的问题,如果没有被动查问接口,最次最次咱们手动去商户后盾导出,再导入零碎内。最初有一种最原始的形式,叫做财务打款(意思就是没有自动化退款流程)。对账历经含辛茹苦,总算到了对账这个环节,个别有以下几个差别 (自求多福型)没有任何能够提供的账单(自食其力型)三方零碎提供了能够导出的商户后盾,通过导入表格实现对账(半自动化型)分为两种,提供FTP供下载对账单,另外一种通过邮件形式定时发送账单,程序通过读邮箱实现对账最初说一点,放弃着不齐全信赖三方零碎的准则,对账这块还是要审慎的,尽量把危险挡在用户付款时吧。致谢感激你看到这里 ,心愿本篇文章能够帮到你,谢谢。

May 4, 2022 · 1 min · jiezi

关于php:浅谈支付系统开发基本流程

前言Hi,各位好久不见,我是CrazyCodes,明天咱们来聊聊领取零碎。 领取零碎是每个零碎都必备的模块之一,也是泛滥模块中最外围的性能,如果领取呈现问题,那么意味着会间接影响到产品收益,事变重大水平高。 本篇咱们聊聊领取零碎的根本流程,它们别离为付款、告诉(包含同步告诉、异步告诉)、查问、退款以及对账,下方是本篇文章会用到的流程交互图。 付款 先聊聊发动领取前须要做哪些事 用户在选中心仪的商品后,首先咱们创立订单,创立订单的根本信息,如商品的名称、价格、数量以及用户的收货地址等后是咱们后续须要的参数其次如果零碎中集成多种领取形式的话,咱们会有一个收银台的页面,供用户抉择应用某个领取形式实现领取,例如支付宝、微信、银联等在用户实现抉择后,咱们依据三方领取零碎须要的参数组装好,向三方发动领取申请,个别须要的信息大抵包含 订单号、商品的名称、价格、同步&异步告诉地址,有局部领取形式也须要用户的收货地址、用户的银行卡信息(卡号、cvv、日期)当然用户隐衷信息是须要加密传输的,总而言之,三方领取零碎须要什么,咱们就传什么。当所有准备就绪,咱们通过三方领取零碎提供的PayUrl发动付款。告诉 用户无论付款胜利或失败,三方都会至多给到咱们一个同步告诉,那么咱们先理解下什么是同步告诉 如上图所示,当三方零碎确认用户已实现付款,会依据咱们在付款时提供的告诉地址,向我方发动间接跳转回本站的POST或者GET申请,申请附带三方传输给咱们一些要害交易信息,如果是挪动端这类告诉会在调用领取的Callback的回调后果内告诉大抵的参数有咱们传输的大部分信息、交易状态、第三方交易号、签名(用于单方系统验证起源)和一些可能临时用不到的信息当咱们接管到回传的数据后,首先进行校验,保障不是欺诈申请,校验的内容无非是单方零碎确定的签名算法,还有一些关键字段,例如金额是否匹配等。咱们不能齐全信赖三方零碎发送的信息,在咱们接管到告诉后,如果三方零碎有提供查问接口,咱们还是须要通过查问形式,反查三方订单交易要害信息,以保障付款的确顺利完成。当验证实现后,依据本人零碎逻辑,将订单进行后续流转 理解完同步告诉后,咱们再看下异步告诉,有局部敌人比拟纳闷,有同步告诉了,那么为什么还须要异步告诉,你能够暂且了解为同步告诉理论是实现了付款流程,这是一个瞬发的过程,三方零碎也是临时认为付款已实现,但如果出现异常或者用户在三方秒退款或者申述,那么咱们的流程将会受到影响。 如上图所示,三方零碎个别也须要归档,就是零碎实现全副校验后,确保交易平安实现后,叫交易退出数据库中,这时,整个付款流程才彻底实现。这时三方会通过咱们提供的异步告诉地址(有时异步和同步告诉是一个地址),告诉咱们付款的确曾经实现。 咱们接管到三方后,仍旧先进行校验,避免申请欺诈,而后确保信息正确性,仍旧是去申请查问接口,异步告诉与同步告诉最大的区别是咱们在确保信息残缺并正确后,需向三方零碎返回一个单方零碎约定的值,可能是HTTPCODE = 200 ,也或者Document内写个200或者实现等等,不同三方零碎,要求不同。 退款 有买就有退,退款占领取模块一半的逻辑,大抵流程与领取时没有太大区别,如上图所示。 只是大部分三方零碎,退款个别通过HTTP Reponse返回后果,并不会有同步告诉,咱们依据用户发动退款的商品金额创立退款单,并组装必要参数后,申请三方提供的RefundUrl,实现退款申请,留神,是退款申请,为什么是退款申请而不是退款呢?这理论是一个时效的问题,个别退款都不是实时的,因为三方零碎可能还有下方链路(例如下方可能对接的某银行),那么退款是须要一条链路的主动审批或者人工审批的,当全链路确认能够退款时,才能够实现退款。 因为是非实时的,所以无同步告诉,但大部分零碎内是有异步告诉的,当三方零碎确认退款实现后,会依据咱们发动领取时传输的异步告诉地址,告诉我方退款实现,并携带必要参数。 当咱们接管后,仍旧先进行校验,以防欺诈,而后还是须要通过三方提供的查问接口查问退款状况,并依据本身零碎逻辑,实现退款实现的打标,并告诉用户。 当然,如果没有异步告诉的话,咱们能够通过延时队列,失败队列重试或者定时脚本的形式,应用查问接口,不定时向三方申请退款后果。 对账领取或者退款实现后,还没有完结,咱们该当定时拉取账单,大部分三方零碎都会提供例如bill的接口,获取账单后,咱们要用我方零碎数据与三方零碎数据比照,确保每笔交易金额、交易工夫、交易状态完全正确,当遇到谬误的中央,就应该去查找问题点了。 只有对账实现后,才是正确实现了整个交易,否则你公司的财务早晚会找到你头上的,到那时这件事件就不仅仅是程序实现那么简略了。 致谢感激你看到这里 ,心愿本篇文章能够帮到你,谢谢。

April 30, 2022 · 1 min · jiezi

关于php:MyCms-自媒体-CMS-系统-v331支持-Swoole-热更新

MyCms 是一款基于Laravel开发的开源收费的自媒体博客CMS零碎,助力开发者常识技能变现。 MyCms 基于Apache2.0开源协定公布,收费且不限度商业应用,欢送继续关注咱们。 v3.3.1更新内容 新增:启用新swoole反对 新增:swoole反对热更新 新增:swoole热更新埋点 新增:插件兼容swoole热更新 新增:后盾减少会员收货地址治理 批改:swoole默认配置 批改:更新主动加载文件 优化:删除分类同时删除别名 优化:删除文章同时删除别名 优化:批改阐明文档 修改:菜单治理页反复弹窗 删除:swooletw/laravel-swoole 更新重点 一、Swoole 反对更新 1、删除了原有的 swooletw/laravel-swoole 包 2、启用新 swoole 反对拓展 3、后盾革除缓存操作反对热更新 4、URL 优化插件适应热更新 5、插件安装操作主动热更新 二、收货地址治理 后盾新增用户收货地址治理 重磅举荐 活码二维码工具

April 27, 2022 · 1 min · jiezi

关于php:笔试记录统计每天不同类型的金币总数

问题形容统计每天不同类型金币的总数。 例如输出:$data = [ ['time'=>'2011-11-04','type'=>1,'gold'=>100], ['time'=>'2011-11-04','type'=>1,'gold'=>200], ['time'=>'2011-11-04','type'=>2,'gold'=>200], ['time'=>'2011-11-04','type'=>2,'gold'=>200]];输入:[ ['time'=>'2011-11-04','type'=>1,'gold'=>300], ['time'=>'2011-11-04','type'=>2,'gold'=>400]]阐明:2011-11-04 号类型为 1 的总金币数为 100 + 200 = 300,同理 2011-11-04 号类型为 2 的总金币数为 200 + 200 = 400 。问题剖析首先思考什么状况下,两条记录的金币数能相加?只有当两条记录的 'time' 和 'type' 雷同时能力相加。 实现思路:判断相邻两条记录的 'time' 和 'type' 是否雷同,如果雷同则更新金币总数,而后持续判断与下一条记录的 'time' 和 'type' 是否雷同。反复这个过程,直到遍历了所有的记录。 参考代码function solution($data){ $i=0; $re = []; while($i<count($data)){ $j = $i + 1; $total = $data[$i]['gold']; while($j < count($data) && $data[$i]['time'] == $data[$j]['time'] && $data[$i]['type'] == $data[$j]['type']){ $total += $data[$j]['gold']; $j++; } $re[] = [$data[$i]['time'],$data[$i]['type'],$total]; $i = $j; } return $re;}工夫复杂度尽管代码中有嵌套的二层循环,但每条记录只会扫描一次,因而工夫复杂度为 \(O(n)\)。 ...

April 27, 2022 · 1 min · jiezi

关于php:thinkphp配置环境引入UI

1. 配置环境配置减速源,装置orm扩大,装置composer,装置驱动,应用composer命令在指定的目录装置Thinkphp6.x;配置conposer中国源composer config -g repo.packagist composer https://packagist.phpcomposer.com下载ormcomposer require topthink/think-orm装置composerapt install composer装置mysqliapt install php-pdo php-mysqli应用composer命令在指定目录装置thinkphpcomposer create-project topthink/think tp6demo 将.example.env文件批改为.env文件,配置数据库账号密码,以及开启调试; root 123456 student true 在命令行应用以下命令开启虚构服务器,可配置域名或本地ip,我集体应用 php think run //localhost:8000 2. 引入UI间接将bootstrap蕴含js和css文件夹拷贝我的项目中public/static里;配置config/view.php,设置动态调用的模板门路;//模板替换输入'tp1_replace_string' => [ '__JS__'=> '../static/js', '__CSS__' => '../static/css',], 控制器里新建test办法,用于测试UI引入的正确性,这时拜访页面会报错提醒没有装置驱动。下一步去装置驱动。 在命令行中执行以下命令装置驱动 composer require topthink/think-view 批改config/view.php文件为'view_suffix' => 'php',新建模板文件index/test.php bootstrap-theme.min.css引入UI,留神UI在<head><title></title></hrad>上面引入 <!-- 引入Bootstrap CSS -->{css href="/static/css/bootstrap.min.css"}{css href="/static/css/style.css"}<!-- 挪动设施优先--><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit-no">创立模板文件view/index/test.html,引入UI因为咱们还没有style.css文件,所以要去动态文件下的css里创立一个,内容为@charset "UTF-8";在元素里找到引入的文件,右键来到款式编辑器,看会不会显示文件内容,显示则示意引入胜利body里引入js文件 <!-- 引入js文件 -->{js href="/static/js/jquery-3.3.1.min.js"}{js href="/static/js/bootstrap.bundle.min.js"}3. 外围代码按钮<button>表格<table> <div class="container pt-5 mt-5"> <div class="row"> <div class="col-3"> <button class="btn btn-secondary">用户治理</button> </div> <div class="col-9"> <table class="table table-bordered"> <thead class="bg-light"> <tr> <th>1</th> <th>2</th> <th>3</th> <th>4</th> <th>5</th> </tr> </thead> </table> </div> </div></div>

April 24, 2022 · 1 min · jiezi

关于php:算法技巧之前缀和

一、什么是前缀和?对于一个给定的数列 \(A\) ,它的前缀和数列 \(S\) 中 \(S_{[i]}\) 示意从第 \(1\) 个元素到第 \(i\) 个元素的总和。用公式示意为: $$S_{[i]}=\sum_{j=1}^iA[j]$$代码如下: $S = [0];for ($i=0;$i<count($arr);$i++) { $S[$i+1] = $S[i] + $arr[$i];}二、前缀和的利用和为K的子数组给定一个整数数组和一个整数 k,能够找到该数组中和为 k 的间断的子数组的个数。三、前缀和的示例(一)问题形容给定一个整数数组和一个整数 k,你须要找到该数组中和为 k 的间断的子数组的个数。 输出:$nums = [1,6,2,5,4,2]; $k = 8;输入:1。(间断子数组为[6,2])(二)问题剖析(1)先从相熟的数列开始: 数列\( \lbrace a_n \rbrace \) $$a_1,a_2,a_3,...,a_{n+1},...$$ 数列的前 n 项和: $$S_n=a_1+a_2+a_3+\ldots+a_{n-1}+a_{n}$$ 例如,求数列的前 3 项和 \(S_3 = a_1 + a_2 + a_3\) ,数列的前 7 项和 \( S_7 = a_1 + a_2 + a_3 + a_4 + a_5 + a_6 + a_7 \)。 ...

April 24, 2022 · 3 min · jiezi

关于php:算法技巧之前缀和

一、什么是前缀和?对于一个给定的数列 $A$ ,它的前缀和数列 $S$ 中 $S_{[i]}$ 示意从第 $1$ 个元素到第 $i$ 个元素的总和。用公式示意为:$$S_{[i]}=\sum_{j=1}^iA[j]$$ 二、前缀和的利用和为K的子数组给定一个整数数组和一个整数 k,能够找到该数组中和为 k 的间断的子数组的个数。三、前缀和的示例(一)问题形容给定一个整数数组和一个整数 k,你须要找到该数组中和为 k 的间断的子数组的个数。 输出:$nums = [1,6,2,5,4,2]; $k = 8;输入:1。(间断子数组为[6,2])(二)问题剖析先从相熟的数列开始:数列 $\lbrace a_n \rbrace$$$a_1,a_2,a_3,...,a_{n+1},...$$数列的前 n 项和:$$S_n=a_1+a_2+a_3+\ldots+a_{n-1}+a_{n}$$ 例如,求数列的前 3 项和 $S_3 = a_1 + a_2 + a_3$ ,数列的前 7 项和 $S_7 = a_1 + a_2 + a_3 + a_4 + a_5 + a_6 + a_7$。 如果要求间断子数列 $ a_4,a_5,a_6,a_7 $ 的和。能够用数列的前 7 项和减去数列的前 3 项和。即:$$S_7 - S_3 = a_4 + a_5 + a_6 + a_7;$$ ...

April 23, 2022 · 2 min · jiezi

关于php:博睿数据携手F5共同构建金融科技从代码到用户的全数据链DNA

4月20日,F5以“云无边界,架构将来”为主题的多云应用服务科技峰会正式举办,博睿数据作为解决方案合作伙伴缺席了本次峰会。 博睿数据资深架构师张冲以“构建以用户为核心的边缘服务平台”为题发表了宗旨演讲,着重论述了博睿数据如何以“用户体验”为核心,构建从代码到用户的对立运维平台。 随同着云计算、物联网、大数据、人工智能、5G等新兴技术的疾速倒退,数字经济正在减速到来。与此同时,数字化利用的爆发性增长,用户对利用体验提出了更高要求,新兴技术对市场的推动正在粗浅扭转着各行各业与数字经济的互动形式。同时,在疫情常态化的背景下,数字经济曾经成为我国国民经济倒退的要害组成部分,也是国家"十四五"布局中的重要一环。 博睿数据资深架构师张冲示意,“以银行为例,用户体验为什么变得越来越重要,大家能够来看这样一组数据,假如页面关上工夫慢1秒,那么就将会有16%用户降落量,访问量降落11%,整体转化率升高7%”,所以用户体验也逐步成为各大银行的考核规范之一,这些都印证了站在用户视角去思考的重要性。” 博睿数据作为一家在IT 运维畛域走过十几年的运维老兵,多年来凭借深厚的技术积攒一直打磨产品以配合市场须要。作为F5 的重要解决方案合作伙伴,博睿数据也始终致力于用简略产品性能扩大广大的数据采集能力,通过整合Nginx的开源技术劣势,进一步延展产品技术能力,从用户角度登程,构建从代码到用户的对立数据平台。 博睿数据COO吴静涛在高端圆桌探讨中指出,“Nginx平安技术的可靠性与易开发性而言,其保障了企业可能具备更好、更牢靠 IT技术架构,只有更好的IT技术架构能力撑持更好的数字化转型,无论是在分布式还是在微服务架构里, Nginx技术都曾经被全世界用户验证过。” 吴静涛强调,“目前,博睿数据曾经能够建成了统一化的数据中台,以用户为核心,将整个数据进行数据缝合,实现数据治理,买通代码到用户拜访的全过程,构建以用户为核心的全新的IT指标体系,从而帮忙企业去构建一套全新的业务验证流程,达到更好地服务不同性别、年龄、地区和应用习惯用户的指标。” 同时,通过数据中台买通“云-管-边-端”,将不断扩大的IT零碎各环节所产生的信息进行收集和观测,并联合数据的信息特色与业务流程、零碎体现、用户体验各环节的特点进行特色关联,实现全零碎观测、实时预警、分布式追踪以及代码级问题预警&解决。同时,还基于机器学习、人工智能等技术一直学习降级,提供更具业务价值的智能预警,从而保障用户业务零碎全环节的稳固,助力云原生时代服务可达。 2021年至今,博睿数据先后推出了搭载了AI能力的新一代APM产品Server7.0,新一代的对立智能运维平台Dataview,新一代对立告警平台Onealert等,一直落地智能异样检测、根因剖析、故障预测等场景。基于人工智能的能力实现运维监控场景的信息整合、特色关联和业务洞察,帮忙企业确保数字化业务安稳运行,并保障良好的数字化体验。 将来,博睿数据还将同F5以及更多同行一道,独特构建从代码到用户的对立数据平台的更多实现形式,同时,博睿数据也将基于现有的技术积攒,一直打磨产品实力,为更多企业提供更为精细化的数字化转型服务。

April 22, 2022 · 1 min · jiezi

关于php:2022-PHP程序员修炼秘籍

前言Hi , 各位大佬、小佬们,我是CrazyCodes,原本打算在年初奉上本篇,但因诸多起因提早了 以下是我今年的文章 2021 PHP程序员修炼秘籍 https://segmentfault.com/a/11...2020 PHP程序员修炼秘籍 https://segmentfault.com/a/11...2019 PHP程序员修炼秘籍 https://segmentfault.com/a/11...计算机根底数据结构 是相互之间存在一种或多种特定关系的数据元素的汇合以上的学术性解释有点艰涩难懂哈,首先为什么要发明那么多数据结构,其最外围的起因就是“需要”,不同的需要要求的关键点不同,这里着重强调工夫与空间的择优,不同的数据结构,理论都是在衡量工夫与空间的调配上,咱们举个例子 以程序表(数组)和单链表来说 首先程序表,顾名思义是顺序存储,那么顺序存储的劣势是访问速度快,因为它的存储是连续性的,咱们只须要在以后地址+1,就能够拜访到下一个数组元素,然而呢,就是因为它的地址是连续性的,咱们在对数组进行删除和减少时,麻烦就比拟大了,当咱们想删除或减少某个数组元素,那么就须要挪动在删除或减少的地位之后的所有元素,保障其存储是连续性的。 那么咱们就能够认为,数组这样的数据结构实用于要求查问速度快,占用空间小,但更新速度略微慢一点的需要。 反观单链表 单链表的每一个结点由内容和指向下一个结点(next)的地址指针组成,每一个next指向他下一个结点的地址,这时比照数组来说,因为每个内容都须要两个地址块去存储,那么存储同样数量的单链表与数组比照,占用的空间是数组的两倍,咱们持续看单链表的更新和删除操作,因为单链表每个元素通过next来维系,所以咱们只须要将要插入的结点的next指向要插入结点后一个的结点的地址,再将要插入的前一个结点的next指针指向要插入结点的地址,就能够实现更新操作了。 那么咱们就能够认为,单链表这样的数据结构实用于要求查问和更新速度快,但能够承受就义一部分存储的需要。 那么回到事实需要中,数组和单链表的个性映射了很多事实中的需要点,例如 要求查问速度快,更新速度能够慢一点的处分规定的计算要求更新速度快,空间能够占用多一点的用户领取后果的实时更新举荐入门书籍 《大话数据结构(溢彩加强版)》 清华大学出版社举荐在线课程 王争老师的《数据结构与算法之美》 算法 好的算法与数据结构非亲非故为什么说算法与数据结构相干,首先了解下为什么须要算法,那么算法是什么? 算法是为了更好的解决问题,那么解决什么问题? 与数据结构一样,均衡工夫与空间的问题 一道小学的数学题举例 (15 + 4) * 3 = ?你的数学老师必定是这样教你的 (15 * 3) + (4 * 3) = 57那么为什么要这样做?原公式咱们也能够做进去,因为第二种办法计算能更快的速度计算出来,这就是上述咱们说的解决工夫问题 举一个简略的例子,分而治之是算法内常见的形式,例如二分查找,咱们将一个数组分成两局部,别离同时去检索要查找的数据,那么就要比从头一个一个查找速度要快一倍(疏忽极其状况,第一个或者最初一个命中),这样比照二分查找和简略的检索,那么二分查找进步了效率(也就是缩短了检索工夫) 当然,有一些算法是须要应用在特定的数据结构中的,例如熟知的二叉树,树的查找是经典的分而治之的案例,如果是一颗有序的树,那么他的查找时间复杂度是 O(Log2n),意味着咱们均匀查找时间会比失常按序检索快1倍甚至更高(疏忽极其状况),但二叉树的结构是由链表组成,一棵树的左子结点指针和右子结点指针别离占用空间,这阐明一个树结点至多占用三个空间,并且放弃树始终是有序状态须要就义更新老本,那么树的查找咱们能够认为次要目标是为了进步查问的速度,对更新和空间占用能够有肯定的容忍。 举荐入门书籍 《趣学算法》 人民邮电出版社举荐在线课程 王争老师的《数据结构与算法之美》 数据库系统 数据库与数据结构非亲非故 范式就是前辈通过一直的验证给到的为了建设冗余较小、结构合理的数据库,是设计数据库必须遵循的肯定规定,在关系型数据库中这种规格叫做范式,本篇不仅阐明范式设计,也会给到一些例子,带着各位一起剖析给到的数据表设计属于第几范式。 对于范式具体能够看我这篇 https://segmentfault.com/a/11... 为什么说数据结构与数据库系统非亲非故,以如何进步查问效率为例,如果咱们的数据存储在文本文件(属于顺序存储),那么咱们向在文本中查问某一段数据,咱们只能从文件头部或者尾部开始查问,相似于链表的程序查问,那么如果将 O(N)的查问效率进步到O(log2n)的查问效率呢,这里就应用了树结构,MySQL中应用的是红黑树,红黑树的具体原理就不在本文中过多形容了。 举荐在线课程 丁奇老师的《MySQL实战45讲》 计算机组成 从根上了解计算机这里以上述数据库为例,除了应用特定数据结构解决效率问题,这仅仅在应用层,在物理层,机械硬盘和SSD也会影响数据的查问效率,冷数据适宜放在机械硬盘中,SSD则更适宜放一些频繁操作的数据,那么SSD不能放冷数据吗?答复当然是能够的,但到了硬件层面,咱们就要思考费用问题了,个别冷数据都是在做数仓,上亿的数据放入SSD硬盘,却不频繁应用,那么老本会进步很多。 除非之外还有CPU,内存,GPU等等常识都会在计算机组成中看到。 举荐在线课程 徐文浩老师的《深入浅出计算机组成原理》 计算机网络上图列出须要理解的一些外围知识点,可google顺次学习。 操作系统举荐在线课程 刘超老师的《趣谈 Linux 操作系统》 ...

April 20, 2022 · 1 min · jiezi

关于php:MyCms-自媒体-CMS-系统-v322广告插件优化

MyCms 是一款基于Laravel开发的开源收费的自媒体博客CMS零碎,助力开发者常识技能变现。 MyCms 基于Apache2.0开源协定公布,收费且不限度商业应用,欢送继续关注咱们。 v3.2.2 更新内容 新增:广告类型细分新增:文章状态管制新增:推送插件兼容文章状态新增:后盾增加和更新后操作埋点修复:首次启用广告插件出错问题修复:上传组件因命名产生的异样 更新重点 一、广告插件优化 新增图片广告和文本链接。 //调用办法@foreach(ad('link') as $ad) // $ad['url'] 广告链接 // $ad['text'] 广告文本@endforeach@foreach(ad('image') as $ad) // $ad['url'] 广告链接 // $ad['path'] 广告门路@endforeach 二、文章状态管制

April 20, 2022 · 1 min · jiezi

关于php:laravelsoar2x-自动监控输出-SQL-优化建议辅助-laravel-应用-SQL-优化

laravel-soar - 主动监控输入 SQL 优化倡议、辅助 laravel 利用 SQL 优化。源码https://github.com/guanguans/laravel-soar 性能反对启发式算法语句优化倡议、索引优化倡议反对 EXPLAIN 信息丰盛解读主动监控输入 SQL 优化倡议Debug bar、Soar bar、JSON、Clockwork、Console、Dump、Log、自定义输入器(多种场景输入)反对查问构建器生成 SQL 优化倡议装置$ composer require guanguans/laravel-soar --dev -vvv配置注册服务laravel$ php artisan vendor:publish --provider="Guanguans\\LaravelSoar\\SoarServiceProvider"lumen将以下代码段增加到 bootstrap/app.php 文件中的 Register Service Providers 局部下: $app->register(\Guanguans\LaravelSoar\SoarServiceProvider::class);应用(示例代码)主动监控输入 SQL 优化倡议Json 响应(残缺示例){ "message": "ok", "soar_scores": [ { "Summary": "[☆☆☆☆☆|0分|3.56ms|select * from `users` where `name` = 'soar' group by `name` having `created_at` > '2022-04-19 18:24:33']", "HeuristicRules": [ ... { "Item": "GRP.001", "Severity": "L2", "Summary": "不倡议对等值查问列应用 GROUP BY", "Content": "GROUP BY 中的列在后面的 WHERE 条件中应用了等值查问,对这样的列进行 GROUP BY 意义不大。", "Case": "select film_id, title from film where release_year='2006' group by release_year", "Position": 0 }, ... ], "IndexRules": [ { "Item": "IDX.001", "Severity": "L2", "Summary": "为laravel库的users表增加索引", "Content": "为列name增加索引;为列created_at增加索引; 因为未开启数据采样,各列在索引中的程序须要自行调整。", "Case": "ALTER TABLE `laravel`.`users` add index `idx_name_created_at` (`name`(191),`created_at`) ;\n", "Position": 0 } ], "Explain": [], "Backtraces": [ "#13 /app/Admin/Controllers/HomeController.php:74", "#55 /Users/yaozm/Documents/develop/laravel-soar/src/Http/Middleware/OutputSoarScoreMiddleware.php:45", "#76 /public/index.php:55", "#77 /server.php:21" ] }, ... ]}Soar bar ...

April 20, 2022 · 3 min · jiezi

关于php:1-PHP

typora-copy-images-to: images1.1 今日指标把握互联网的工作原理把握域名、DNS和IP地址之间的关系了解hosts文件在互联网拜访过程中的作用了解动态网站和动静网站的区别了解动静网站的服务器组成理解PHP的工作过程把握PHP变量的应用形式了解可变变量的概念把握可变变量的拜访模式了解变量的值传递和援用传递的区别1.2 PHP简介1.2.1 概述PHP是Hypertext Preprocessor的缩写,(超文本预处理器)是一种在服务器端运行的开源的脚本语言。 LAMP组合(Linux,Apache,MySQL,PHP),这四个产品都是公开源代码的产品 php是一门语言,用来做业务逻辑apache为PHP提供了运行环境linux为Apache的运行提供了平台mysql数据库用来存储数据多学一招:什么是wamp组合 windows+apche+mysql+php1.2.2 五个基本概念1、动态页面和动静页面 动态页面:服务器不执行的页面动静页面:服务器执行的页面问题:动静网站中是否能够寄存动态页面 答:能够 2、客户端和服务器端 浏览者这段是客户端服务器端:给浏览者提供服务 3、端口和端口号 端口号的范畴: 0-65535 4、BS架构和CS架构 BS:通过浏览器去拜访服务器 b:browser(浏览器)s:sever(服务器)长处:1、只有有浏览器就能够拜访2、开发低毛病:2、开发的代码都放在服务器上 胖服务器-瘦客户端所有的web都是BS架构的 CS:通过客户端软件去拜访服务器 c:client(客户端)s:server(服务器)长处:1、能够开发客户端和服务器端,这时候就能够实现负载的平衡毛病:1、必须要装置一个软件能力去拜访2、开发成本高例如:QQ、炒股软件 5、前台和后盾 前台:浏览器看到的界面后盾:管理员看到的界面1.2.3 PHP的长处跨平台,既能在windows上运行,也能在linux上运行源码凋谢:不会波及到版权问题语法简略:PHP入门简略运行在服务器端,只有在服务器部署环境就能够了。1.3 Web介绍1.3.1 web时代的变迁从互联网开始崛起到当初,经验了从web1.0、2.0到web3.0的过程 Web1.0(信息共享)的次要特点在于用户单纯的获取信息Web2.0(信息共建)更重视用户的交互作用,用户既是网站内容的浏览者,也是网站内容的制造者。Web3.0(信息传承)通过第三方信息平台对多家网站的信息进行整合,用户在互联网上领有本人的数据,并能在不同网站上应用举例: Web1.0:来到一个餐馆,老板给你上了一盘番茄炒蛋;Web2.0:来到一个餐馆,你跟老板被动点了一份番茄炒蛋;Web3.0:来到一个餐馆,老板见到你就问,老规矩,还要番茄炒蛋?1.3.2 Web服务原理动态网站原理(浏览器-服务器) 动静网站原理(浏览器-服务器-数据库) 智能网站原理(浏览器-服务器【剖析举荐】-数据库) 1.4 搭建Web服务器1.4.1 装置phpstudy间接解压即可 1.4.2 目录构造 启动服务 1.4.3 拜访服务器在www目录下创立demo.php页面 <?php phpinfo();拜访服务器 拜访规定:http://服务器ip地址/php页面比方:http://localhost/demo.phphttp://127.0.0.1/demo.php 1.4.4 罕用的命令补充DOS命令 切换盘符 盘符+冒号进入目录 cd 目录地址Apache的命令 httpd -v 查看apache版本号 versionhttpd -t 检测运行环境 test PHP的命令 php -v PHP版本号 1.4.5 互联网通信原理实质一台电脑拜访另外一台电脑资源、寻址过程(IP地址、端口、域名、DNS) 在互联网上,IP地址是用来辨别每台计算机的标识,然而IP记忆不敌对,咱们将IP地址取一个名字,一个IP对应一个名字,这个名字就称为域名。 拜访过程: ...

April 19, 2022 · 2 min · jiezi

关于php:PHP的Laravel与Composer部署项目时常见问题

咱们在部署PHP我的项目时,其实大部分的PHP我的项目会创立环境检测与一键Install页面。 然而,有许多的我的项目还采纳了Composer部署。 什么是Composer至于什么是Composer,我就简略说一下。 Composer是 PHP 的一个依赖管理工具。咱们能够在我的项目中申明所依赖的内部工具库,Composer 会帮你装置这些依赖的库文件,有了它,咱们就能够很轻松的应用一个命令将其他人的优良代码援用到咱们的我的项目中来。 相当于Node外面的npm。 Laravel框架 Laravel是一个开源PHP框架,功能强大且易于了解。它遵循模型 - 视图 - 控制器设计模式(MVC)。Laravel重用了不同框架的现有组件,这有助于创立Web应用程序。这样设计的Web应用程序更加结构化和实用。 具体特点我就不说了,其中比较显著的是,依赖管理器齐全基于composer。 报错:php artisan key:generate这个谬误,个别有三个问题,对应解决一下。 报错1:PHP脚本占用内存太多,memory_limit默认128m不够用。PHP Fatal error: Allowed memory size of XXXXXX bytes exhausted 。Composer命令失败:Composer外部减少memory_limit到1.5G. 报错2:PHP版本问题。 这个就对症剖析就能够。 留神的是,有时候不是你我的项目PHP版本不行,而是你composer的版本没有对应。报错3:须要更新composer。 composer updateLaravel 呈现 No application encryption key has been specified.首先,咱们要看看有没有.env文件,或者.env文件后还追加了.example后缀。 1、.env.example 改名应用命令 copy 批改为 .env。 此时可能还提醒短少了Key。咱们应用命令生成。2、应用命令 php artisan key:generate 获取明码,主动保留到 .env。 命令间接在终端运行就能够。 Composer获取依赖超时首先判断是否存在这个依赖包。 其次,可能是国外的源,下载超时很失常,咱们应用命令将源改为国内的源。 composer config -g repo.packagist composer https://packagist.phpcomposer.com Composer 降级带来的坑: Undefined index: name我在部署时也遇到了这个问题,咱们能够间接尝试回滚版本或者升高版本,部署下来后再降级回来。 Undefined index: name如果存在这个报错,那么咱们能够这样: ...

April 18, 2022 · 1 min · jiezi

关于php:倒计时第3天Google-Summer-of-Code报名即将截止Casbin社区还有空缺名额

Google Summer of Code 介绍 Google Summer of Code ( GSoC ,即 Google 编程之夏)是 Google (谷歌)组织并提供经费,面对寰球在读学生的在线编程我的项目。Google 编程之夏是一个全球性我的项目,旨在为学生们和开源、自由软件、技术相干的组织建立联系,让学生们奉献代码并取得报酬!组织会提供导师,在学生从相熟社区到奉献代码的整个过程中提供领导。这个想法的目标是让学生们参加和相熟开源社区,并帮忙他们充分利用寒假工夫去失去锤炼。 Google Summer of Code 官网: https://summerofcode.withgoog...中文介绍: https://github.com/gsoc-cn/gs... 或 https://zhuanlan.zhihu.com/p/... 或 https://zhuanlan.zhihu.com/p/... Casbin 开源我的项目介绍Casbin 是一个弱小的、高效的开源访问控制框架。波及到 Go, Java, Node.js, Javascript (React), Python, PHP, .NET, Delphi, Rust 等多种语言。Casbin 由北京大学罗杨博士创建于2017 年,外围保护团队有数十人。2020 年被 Google 选入 GSoC ,成为入选的 200 个开源我的项目之一。2021和2022年Casbin持续入选GSoC。 具体请理解 Casbin 官网: https://casbin.org/ 1 、工作职责:每周与 GSoC 导师进行线上探讨,实现 GSoC 我的项目规定的开发工作。GSoC 导师由开源我的项目创始人或其余核心成员负责;积极参与开源社区的建设,参加代码提交、解决 Issue 、审核 PR 等日常工作;配合实现 Google 官网要求的资料提交等事项,包含计划提出( Proposal )、中期和开端评估( Evaluation )等。2 、职位要求:本科、硕士或博士在读(已毕业、工作的无奈加入);对开源软件、开源社区感兴趣;相熟一种或多种编程语言,有较强的工程能力,代码格局清晰标准,长于团队合作;有肯定英文读写能力,可能纯熟使用英语在 GitHub 进行开发、合作;较强的沟通能力和逻辑表达能力。3 、具备以下条件者优先:本科就读于 985 高校或北京邮电大学;相熟计算机网络、网络安全,有相干我的项目教训;相熟 Go 语言、分布式系统、微服务架构,有相干我的项目教训;在 GitHub 较为沉闷,有本人的开源我的项目,或参加过出名开源我的项目;能够在 GSoC 我的项目完结后持续长期参加开源社区的开发、建设或保护。具体岗位介绍: https://github.com/casbin/Sum... ...

April 17, 2022 · 1 min · jiezi

关于php:剑指offer之二叉树的深度优先搜索

一、树的基础知识(一)树的根本构造在二叉树中的每个节点最多只有两个子节点,能够别离把它们称为左子节点和右子节点。二叉树的根节点没有父节点,一颗非空二叉树只有一个父节点。二叉树的叶节点没有子节点。名词阐明:叶节点:如果一个节点没有子节点,那么它是一个叶节点。例如在图 1 的二叉树中,节点 4、节点 5、节点 6、节点 7 都没有子节点,故节点 4、5、6、7 都是叶节点。 (二)二叉树的递归性质二叉树是一种典型的具备递归性质的数据结构。二叉树的根节点可能有子节点,子节点又是对应子树的根节点,该节点可能也有本人的子节点。例如图 1 中的节点 1 是该二叉树的根节点,节点 1 有左子节点 2、右子节点 3。而节点 2 是左子树的根节点,节点 2 也有子节点。 既然有递归性质,那么天然能够用递归来遍历二叉树。 (三)创立二叉树定义二叉树数据结构 class Node{ public $left = NULL; public $right = NULL; public $data; public function __construct($data){ $this->data = $data; }}二、中序遍历(一)什么是中序遍历?先遍历二叉树的左子树,再遍历二叉树的根节点,最初遍历二叉树的右子树。例如,如果中序遍历图 1 中的二叉树,则先后遍历节点 4、节点 2、节点 5、节点 1、节点 6、节点 3、节点 7。 (二)递归实现(1)参考代码: class Tree{ public $nodes = []; // Node 类是前文的发明二叉树的 Node 类。 public function inorderTraversal(Node $root){ $this->dfs($root,$this->nodes); return $this->nodes; } public function dfs($root,$nodes){ if($root != NULL){ $this->dfs($root->left,$nodes); $this->nodes[] = $root->data; $this->dfs($root->right,$nodes); } }}(2)代码剖析:在我之前写的《递归十诫》几篇博客中,递归的对象是 列表。在递归二叉树时,也能够参考《递归十诫》。 ...

April 17, 2022 · 3 min · jiezi

关于php:MixPHP-发布-v3027-支持-Swow

MixPHP 公布 v3.0.27 反对 Swow更新内容减少 Swow 反对减少 WebSocket, GRPC 的 swoolecopool 过程池反对体验 Swow本次更新次要反对了 Swow, 市面上唯二反对 Swow 的框架 装置composer create-project --prefer-dist mix/api-skeleton api运行还没有装置 Swow 的能够参考文档先装置 Install, Swow 当初还未处于正式版能够先尝鲜体验php bin/swow.php ____ ______ ___ _____ ___ _____ / /_ _____ / __ `__ \/ /\ \/ /__ / __ \/ __ \/ __ \ / / / / / / / /\ \/ _ / /_/ / / / / /_/ //_/ /_/ /_/_/ /_/\_\ / .___/_/ /_/ .___/ /_/ /_/System Name: linuxPHP Version: 8.0.15Swow Version: 0.1.0Listen Addr: http://0.0.0.0:95012022-04-16 20:32:00.415403 INFO Start swow coroutine server测试 Swow 性能在性能上是优于 SwooleCoroutine 在将来的性能中也会反对协程Mongo, 多过程协程 ...

April 16, 2022 · 2 min · jiezi

关于php:简单的PHP多线程爬虫框架querylist实践应用于thinkphp5

php在多线程爬虫这块的确很单薄,但也是存在可行易实现的计划的。 实际框架:thinkphp5要实现这个性能,须要装置两个包: jaeger/querylist:能够实现一些爬网页罕用的语法,比方xPathjaeger/querylist-curl-multi:实现多线程发动网络操作的包querylist的长处是安装简单、无坑,在命令行和接口都能够应用。相干文档:http://www.querylist.cc/docs/...http://www.querylist.cc/docs/... 实现步骤:1.安装包: composer require jaeger/querylistcomposer require jaeger/querylist-curl-multi2.php文件: use QL\QueryList;use QL\Ext\CurlMulti;//爬取列表public function spider(){ $urlPool = []; $startPage = 1; //从第几页开始爬取 $workerNum = 10; //并发执行的数量 $host = 'https://xxxxxx?page='; $nowPage = 1; //执行中用到的暂存计数器 while(1){ //生成要爬取的链接,每次循环打印$workerNum页数据 for($i=1;$i<=$workerNum;$i++){ $urlPool[] = $host.$nowPage; $nowPage++; } $ql = QueryList::use(CurlMulti::class); $ql->curlMulti($urlPool) // 每个工作胜利实现调用此回调 ->success(function (QueryList $ql,CurlMulti $curl,$r){ //此处能够用xpath语法获取到相应的数据 //也能够采纳别的模式来获取数据,可查阅文档 $data = $ql->find('#hits-list > div:nth-child(n) > div.header > div > a:nth-child(1)')->texts(); //打印下以后获取到的链接 和 解析到的数据 Log::write('Current url:'.$r['info']['url']); Log::write($data->all()); //若有简单逻辑,能够进行调用其余办法进行解决 SpiderService::getInstance()->insertToDb($data->all()); }) // 每个工作失败回调 ->error(function ($errorInfo,CurlMulti $curl){ echo "Current url:{$errorInfo['info']['url']} \r\n"; print_r($errorInfo['error']); //出错终止,跳出循环 throw new Exception("报错完结"); }) ->start([ // 最大并发数 'maxThread' => $workerNum, // 谬误重试次数 'maxTry' => 3, ]); //每次执行结束,重置链接池 $urlPool = []; }}

April 16, 2022 · 1 min · jiezi

关于php:ModStart-是基于-Laravel-的模块化开发框架

性能一览最新版本 v3.7.0 功能完善,模块市场丰盛,欢送交换。QQ交换群: 467107293 会员模块通用且残缺,反对残缺的API调用大文件分片上传,进度条显示,已上传文件治理弱小的模块扩大性能,所有模块能够无缝集成,反对在线装置、卸载模块欠缺的开发助手,实现模块、主题的的一键创立欠缺的后盾权限治理,反对基于RBAC的权限管理系统后盾治理反对应用手机、平板、PC,无论何时何地都可方便管理第三方登录(QQ、微信、微博、支付宝、微信小程序)第三方领取反对(微信、支付宝、支付宝当面付、微信扫码、微信小程序)第三方云存储反对,反对云贮存分片上传(阿里云、百度云、华为云、腾讯云、FTP、七牛云、UCloud、又拍云)第三方短信反对(阿里云、腾讯云、华为云、百度云、253云通信、聚合、七牛云、融云、赛邮、UCloud、云片、网易云)丰盛优良的模块反对: 视频点播课一物一码防伪溯源文章投稿零碎Markdown文档治理视频管理系统邮件营销零碎视频直播零碎文库零碎相册零碎文库零碎问答零碎IT工具箱帮忙核心零碎短连贯零碎论坛零碎集体博客零碎发卡零碎积分商城兼职招聘零碎课程报名零碎流动报名零碎简略商城零碎网盘零碎微信公众号管理系统在线客服零碎图床零碎通用CMS零碎 零碎简介ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场领有丰盛的性能利用,反对后盾一键疾速装置,让开发者能快的实现业务性能开发。 零碎齐全开源,基于 Apache 2.0 开源协定,收费且不限度商业应用。 官方网站在线演示模块市场源码地址 / Gitee源码地址 / GitHub技术栈 LaravelVueElement UIjQuery 零碎个性简洁优雅、灵便可扩大后盾RBAC权限治理模块化开发,积木式搭建零碎组件按需加载动态资源丰盛的数据表格、数据表单功能内置文件上传,无需繁琐的开发丰盛的模块市场,后盾一键疾速装置 零碎演示前台演示地址http://cms.demo.tecmz.com/ 用户明码自行注册应用后盾演示地址http://cms.demo.tecmz.com/admin 账号:demo 明码:123456 (演示账号为只读权限) 模块市场丰盛的模块市场,后盾一键装置模块利用 开发文档https://modstart.com/doc 零碎装置环境要求Laravel 5.1 版本 PHP 5.6 PHP 7.0MySQL >=5.0PHP Extension:FileinfoApache/NginxLaravel 9.0 版本 PHP 8.0 PHP 8.1MySQL >=5.0PHP Extension:FileinfoApache/Nginx咱们的测试基于 PHP 的 5.6 / 7.0 / 8.0 / 8.1 版本,零碎稳定性最好装置阐明宝塔一键装置教程:https://modstart.com/doc/install/baota.htmlPHPStudy一键装置教程:https://modstart.com/doc/install/phpstudy.htmlWampServer装置教程:https://modstart.com/doc/install/wampserver.htmlDocker一键装置教程:https://modstart.com/doc/install/docker.html原生环境装置教程:https://modstart.com/doc/install/start.html降级指南参照 https://modstart.com/doc/install/upgrade.html 开发速看以下以一个简略的新闻增删改查页面为例,疾速理解 ModStart 开发的大抵流程。 数据表迁徙文件class CreateNews extends Migration{ public function up() { Schema::create('news', function (Blueprint $table) { $table->increments('id'); $table->timestamps(); $table->string('title', 200)->nullable()->comment(''); $table->string('cover', 200)->nullable()->comment(''); $table->string('summary', 200)->nullable()->comment(''); $table->text('content')->nullable()->comment(''); }); } public function down() { // }}控制器代码class NewsController extends Controller{ use HasAdminQuickCRUD; protected function crud(AdminCRUDBuilder $builder) { $builder ->init('news') ->field(function ($builder) { $builder->id('id','ID'); $builder->text('title', '名称'); $builder->image('cover', '封面'); $builder->textarea('summary', '摘要'); $builder->richHtml('content', '内容'); $builder->display('created_at', '创立工夫'); $builder->display('updated_at', '更新工夫'); }) ->gridFilter(function (GridFilter $filter) { $filter->eq('id', 'ID'); $filter->like('title', '题目'); }) ->title('新闻治理'); }}减少路由和导航在 routes.php 减少路由信息 ...

April 16, 2022 · 1 min · jiezi

关于php:进销存源码php带手机版带产品图片

 一般来说成长型公司最终都会达到一个临界点,即电子表格不再管用,这时进销存零碎的作用就能失去体现。进销存零碎收集和组织要害的业务信息,帮忙企业进行精益、高效的经营,即便企业在扩张也能毫无压力。 进销存源码演示及资源获取:e.csymzs.top 什么是进销存? 在其外围,进销存是一个自动化业务流程的应用程序,并提供洞察力和外部管制,利用地方数据库收集来自部门的输出,包含会计,制作,供应链治理,销售,市场营销和人力资源(HR)。一旦信息被汇编到地方数据库中,领导者就能够取得跨部门的可见性,从而使他们可能剖析各种场景,发现流程改良,并产生次要的效率收益。这意味着,随着人们花更少的工夫开掘所需的数据,老本节约和生产率进步。简略地说,进销存零碎有助于在一个组织中对立人员、外围业务流程和技术。 进销存php源码模块 下图显示了13个不同的进销存模块。 进销存蕴含许多不同的模块——为业务的各个方面量身定制的性能包,包含后盾和前台角色。上面是最宽泛应用的进销存模块的疾速合成。 财务:一个财务模块,简直每个进销存零碎的根底,治理总账和所有财务数据。它跟踪每一笔交易,包含应付账款(AP)和应收账款(AR),并解决对账和财务报告。 洽购:洽购模块治理洽购,无论是原材料还是成品。它能够主动申请报价和洽购订单,当与需要布局相分割时,能够最大限度地缩小适度购买和有余购买。 制作:制作可能很简单,这个模块帮忙公司协调生产产品的所有步骤。该模块能够确保生产合乎需要,并监控在制品和成品的数量。 库存治理:库存治理模块显示以后库存程度到SKU程度,并实时更新这些数字。它还度量与库存相干的要害指标。任何基于产品的公司都须要这个模块来依据以后和预测的需要优化库存。 订单治理:该应用程序监督来自所有渠道的客户订单并对其进行优先级排序,并在交付过程中跟踪订单的进度。一个订单治理模块能够放慢实现和交付工夫,并改善客户体验。 仓库治理:仓库治理模块领导仓库流动,如收货、拣货、包装和运输。通过确定执行这些工作的更无效的办法,它能够在仓库中节省时间和老本。 客户关系治理(CRM): CRM是宽泛行业中企业的风行模块。它跟踪所有与客户的沟通,帮助领导治理,能够进步客户服务和促成销售。 业余服务自动化(PSA):服务企业通常应用业余服务自动化(PSA)模块来打算和跟踪我的项目,包含破费在我的项目上的工夫和资源。它能够简化客户账单,并激励我的项目工作人员之间的合作。 劳动力治理(WFM):劳动力治理(WFM)模块能够跟踪缺勤和工作工夫,有些还能够治理工资。这个工具能够记录部门、团队和集体员工的缺勤和生产力。 人力资源管理(HRM): WFM模块的人力资源管理(HRM)或人力资本治理(HCM)模块版本。它保留有详细信息的员工记录,如可用的PTO和绩效评估,并能够梳理出各个部门或人口统计的劳动力趋势。 电子商务:电子商务模块容许零售商和品牌治理其在线商店的后盾和前端。他们能够应用这个应用程序更改站点的外观,并增加和更新产品页面。 营销自动化:该模块治理所有数字渠道(电子邮件、网络、社交)的营销工作,并使组织可能优化和个性化他们的信息。营销自动化工具能够进步潜在客户、销售和客户忠诚度。 进销存源码零碎的益处 明天的进销存解决方案具备丰盛的个性集,为企业带来了有数的益处。尽管每个公司对这项技术的最大价值的认识各不相同,但以下是进销存提供的要害的广泛劣势: 1. 节约老本: 兴许进销存零碎最大的价值主张是它们能够在许多方面为您的组织节俭资金。通过自动化许多简略的、反复的工作,您能够将谬误降到最低,并且不用以与业务增长雷同的速度减少员工。跨公司的可见性使其更容易发现那些导致成本上升的低效率,从而更好地部署所有资源,从劳动力到库存到设施。而有了云进销存,公司可能很快就会从软件中看到比他们破费更多的增值价值。 2. 工作流的可见性: 所有的工作流程和信息都集中在一个中央,能够拜访该零碎的员工能够看到我的项目的状态,以及与他们的工作相干的不同业务性能的性能。这种可见性可能对经理和领导特地有价值,而且它比搜寻正确的文档和一直要求共事更新要快得多,也容易得多。当初又增加手机版本,让你的工作更加便捷。 3.报告/剖析: 数据只有在公司可能剖析和了解的状况下才有用,而进销存则有助于这一点。当先的解决方案领有令人印象粗浅的报告和剖析工具,用户不仅能够跟踪kpi,还能够显示任何他们能想到的指标或比拟。因为进销存是全方位的,它能够帮忙企业理解一个部门的流程变动或问题如何影响公司的其余局部。 4. 商业见解/情报: 因为进销存能够拜访整个公司的实时数据,这些零碎能够发现有影响的趋势,并提供宽泛的业务洞察力。这使得组织领导人可能更好地做出决策,他们当初能够轻松地拜访所有相干数据。 5. 法规听从性和数据安全: 财务报告规范以及政府和行业特定的数据安全法规常常变动,而进销存能够帮忙您的公司放弃平安和合规。进销存通过跟踪每个事务的生命周期提供审计跟踪,包含恪守所需的批准工作流。企业也能够通过自动化缩小谬误和相干法规听从凌乱的机会。进销存软件提供符合标准和法规的财务报告,SaaS应用程序很好地帮忙公司恪守PCI-DSS。 6. 风险管理: 进销存技术在几个方面升高了危险。细粒度的访问控制和定义的批准工作流程能够增强财务管制和缩小欺诈。此外,更精确的数据能够防止可能导致销售损失或罚款的谬误。最初,查看整个操作状态的能力使员工可能疾速解决业务中断带来的危险。 7. 数据安全: 进销存供应商明确,你的零碎蕴含要害的、敏感的数据,并采取必要的步骤来确保它的平安。随着网络攻击的数量和规模一直减少,这种怠惰比以往任何时候都更为重要。特地是云进销存软件,应用尖端的平安协定,以确保您的公司不会成为破坏性攻打的受害者。 8. 单干: 员工在一起工作时效率最高。进销存解决方案使得团队之间很容易共享信息——比方洽购订单、合同和客户反对记录。它通过让员工适当地拜访相干业务性能的实时数据,突破了部门之间的壁垒。 9. 可伸缩性: 正确的进销存零碎将具备可伸缩性和足够的灵活性,以满足您公司目前和可预感的将来的需要。尤其是云零碎,即便在组织捕捉的数据量和拜访需要减少的状况下,也能适应小的和大的操作变动。 10. 灵活性: 在进销存软件帮忙企业遵循最佳实际的同时,它也提供了反对独特流程和指标的灵活性。该零碎使管理员可能建设公司特定的工作流程,并创立对不同部门和高管重要的主动报告。进销存加强了组织的翻新和创造力。 11. 定制: 尽管大多数公司发现古代进销存反对他们的业务“开箱即用”,但一些公司须要减少宽泛的内置性能。如果您有很多专门的流程,那么应该寻找一个可扩大的零碎,它容许集成商或IT人员编写代码来增加所需的个性,或者能够与自产的或遗留的解决方案集成。然而,在走定制路线之前,请认真看看您的流程——古代进销存解决方案反对的预构建性能和配置是基于从数千家公司收集的最佳实际。以最小化定制为指标。 12. 客户及合作伙伴治理: 进销存能够增强公司的合作伙伴和客户关系。它能够提供对于供应商、运输公司和服务提供商的见解,而云能够实现更好、更不便的信息替换。当波及到客户时,该解决方案能够跟踪调查响应、反对票、退货等,从而使组织可能把握客户满意度的 ...

April 14, 2022 · 1 min · jiezi

关于php:剑指offer之利用广度优先搜索向完全二叉树中添加子节点

问题形容1齐全二叉树是每一层(除最初一层外)都是齐全填充(即,节点数达到最大)的,并且所有的节点都尽可能地集中在左侧。 例如:图1 中的 4 棵二叉树均为齐全二叉树。实现数据结构 CBTInserter 有如下三种办法: CBTInserter(Node root) 应用头节点为 root 的给定树初始化该数据结构;CBTInserter->insert(val) 向树中插入一个新节点,节点类型为 TreeNode,值为 val 。使树放弃齐全二叉树的状态,并返回插入的新节点的父节点的值;CBTInserter.get_root() 将返回树的头节点。图1 阐明:在 (a) 中的齐全二叉树中增加节点 7 失去 (b);在 (b) 中的齐全二叉树中增加节点 8 失去 (c);在 (c) 中的齐全二叉树中增加节点 9 失去 (d)。 什么是齐全二叉树?在读完题之后,写代码之前须要先搞明确什么是齐全二叉树? 齐全二叉树是由满二叉树而引出来的,若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数(即1~h-1层为一个满二叉树),第 h 层所有的结点都间断集中在最右边,这就是齐全二叉树2。总结:对于一个深度为 h 的二叉树必须满足以下条件才是齐全二叉树: 1~h-1 层是满二叉树(国内的满二叉树3)。h 层的所有节点都间断集中在最右边。文字描述有点形象,看几个例子就明确了。图2 图中的(1)(2)(3)都是齐全二叉树,而(4)(5)(6)都不是齐全二叉树。 (1)(2)(3)是齐全二叉树,那必定合乎齐全二叉树的定义。那(4)(5)(6)为什么不是呢?咱们一个一个来剖析: (4)是一个深度为 4 的二叉树,1~2 层是满二叉树,但第三层不是。不满足 1~4-1 层是一个满二叉树的条件。(5)和(6)都是深度为 3 的二叉树,1~2 层是一个满二叉树,然而 第 3 层的所有节点并非间断集中在最右边。(5)的第三层最右边都没有节点,而(6)的第三层的所有节点不间断。问题剖析解决这个问题的关键在于了解齐全二叉树的特点及在二叉树增加节点的程序。 齐全二叉树特点:1~h-1 层是满二叉树,h 层最多有 2h-1个节点。h 层的所有节点都间断集中在最右边。增加程序:如果最底层节点的个数小于2h-1个,则从左到右找到该层第一个空缺地位并增加新的节点。例如,向图(1)中的 (c) 增加节点:图3如果最底层节点的个数为2h-1,此时再向二叉树增加新的节点会在二叉树中增加新的一层,而且新的节点是新的一层最右边的节点,也就是说,新节点的父节点是原来最上面一层的最右边的节点。例如,向图(1)中的 (b) 增加节点:图4在齐全二叉树中增加新节点的程序看起来是从上至下,按层从左至右增加的,这就是典型的二叉树广度优先搜寻的程序。 ...

April 12, 2022 · 2 min · jiezi

关于php:MyCms-自媒体-CMS-系统-v321-发布后台默认首页改版

MyCms 是一款基于Laravel开发的开源收费的自媒体博客CMS零碎,助力开发者常识技能变现。 MyCms 基于Apache2.0开源协定公布,收费且不限度商业应用,欢送继续关注咱们。 v3.2.1 更新内容 新增:后盾默认首页改版 优化:获取分类函数 优化:日志插件IP字段长度 优化:管理员最初登录IP字段长度 修复:自定义页面内容长度 更新重点 一、后盾默认首页改版 二、分类函数优化 新增获取指定分类的子分类 /** * 分类列表 */if (!function_exists('categories')) { function categories($pid = 0) { $values = app('cms')->categoryTree($pid); return pipeline_func($values, 'categories'); }}

April 11, 2022 · 1 min · jiezi

关于php:golang-java-c-cpp-php-等语言的本质

https://www.bilibili.com/vide...

April 10, 2022 · 1 min · jiezi

关于php:云端守沪齐心抗疫WeTest向上海地区用户免费赠送抗疫扶持礼包

以后,上海正处于疫情防控的关键时期,近程办公的工作模式给开发人员的研发测试工作带来了诸多挑战和艰难。本着“用户为本,科技向善”的初心,为了更好的帮忙开发者解决因居家办公带来的测试资源有余等难题,从即日起,WeTest向上海地区的用户收费发放10000份“抗疫搀扶礼包”。小程序端支付流程: 扫描上方海报二维码,进入「腾讯WeTest品质云」小程序。注册/登录腾讯WeTest账号,点击首页“立刻支付”。支付胜利后,搀扶礼包额度即会主动充值至您的个人账户,请到WeTest官网(WeTest.qq.com)控制台应用。PC端支付流程: 关上腾讯WeTest官网(WeTest.qq.com)。注册/登录腾讯WeTest账号,并实现实名认证。点击首页的“立刻支付”,支付胜利后,搀扶礼包额度会主动充值至您的个人账户,请到WeTest官网(WeTest.qq.com)控制台应用。流动阐明: 一、流动工夫: 2022年4月6日 12:00:00至2022年4月12日 23:59:59。二、支付规定:本次流动为WeTest「云端守“沪”,齐心抗疫」福利流动,共发放10000份搀扶礼包,仅向上海地区的用户提供,数量无限,领完即止。同一用户仅限支付1次,同一WeTest账号、同一手机号、同一设施、同一身份证认证信息的视为同一用户。抗疫礼包的额度会发放在您的个人账户中,请返回个人账户查看(不反对集体额度向企业额度的转换)。小程序端支付前请开启手机定位,防止支付失败。三、礼包详情:本次“抗疫搀扶礼包”内含包:云手机1000分钟、规范兼容 200台私有云任意机型、小程序平安扫描根底版1次、压测巨匠自助压测(vum50万 并发数5000)。所有礼包额度的应用有效期自支付之日起30天内应用无效,超过30天后礼包内的权利主动作废。四、支付阐明:用户支付的路径包含:WeTest官网,WeTest微信小程序。支付胜利后,礼包内的额度会主动充值至您的个人账户内,您能够返回控制台查看并应用,局部可能因网络起因有所提早。用户参加本流动过程中不得将所取得的权利转让予别人,不得将该权利用于发售等目标,也不可将该权利进行任何模式的变现或营利,对于违反平台流动规定的用户,腾讯WeTest将对其查究法律责任。五、用户反馈:若您在支付过程中遇到任何异样,或有其余问题,均可通过腾讯WeTest品质云小程序 / WeTest官网 / 腾讯WeTest公众号 分割客服进行相干征询。 写在最初万众一心,共度时艰,WeTest将与所有开发者在一起同心携手,共同努力。心愿能以WeTest的一份“绵薄之力”为大家的我的项目品质保驾护航。让咱们一起迎接春天的到来! 如果您有任何疑难,欢送前来征询客服电话:0755-86013388-22126客服QQ:2746728701工作工夫:周一至周五9:30-18:30 关注腾讯WeTest,理解更多热门测试产品:WeTest腾讯品质开放平台-专一游戏 晋升品质

April 8, 2022 · 1 min · jiezi

关于php:php阿里云osssdk上传失败情况处理

景象oss上传没有胜利,然而拿到了地址,导致拜访时返回404状态码 思路咱们先看本人写的上传oss局部代码 public function oss(string $file, string $object){ $ossClient = new OssClient($this->config['accessKeyId'], $this->config['accessKeySecret'], $this->config['endpoint']); $result = $ossClient->uploadFile($this->config['bucket'], ltrim($object, '/'), $file); return $result['oss-request-url'];}按理说是由sdk返回的result中拿到的地址,上传失败应该会间接抛出异样再看其中uploadFile代码局部 public function uploadFile($bucket, $object, $file, $options = NULL){ // ...省略代码 $response = $this->auth($options); $result = new PutSetDeleteResult($response); return $result->getData();}其中次要办法是$this->auth($options),再进去看 private function auth($options){ // ...省略代码 try { $request->send_request(); } catch (RequestCore_Exception $e) { throw(new OssException('RequestCoreException: ' . $e->getMessage())); } $response_header = $request->get_response_header(); $response_header['oss-request-url'] = $requestUrl; $response_header['oss-redirects'] = $this->redirects; $response_header['oss-stringtosign'] = $string_to_sign; $response_header['oss-requestheaders'] = $request->request_headers; $data = new ResponseCore($response_header, $request->get_response_body(), $request->get_response_code()); //retry if OSS Internal Error if ((integer)$request->get_response_code() === 500) { if ($this->redirects <= $this->maxRetries) { //Sets the sleep time betwen each retry. $delay = (integer)(pow(4, $this->redirects) * 100000); usleep($delay); $this->redirects++; $data = $this->auth($options); } } $this->redirects = 0; return $data;}能够看到抛异常情况只在send_request办法,而外面只在curl自身无奈申请(比方host无奈解析)才会抛出RequestCore_Exception异样也就是说如果是业务类的谬误是会失常走上来的尽管response_code为500时会有重试,然而在这之前曾经创立了response对象如果非500谬误,或者超过重试次数都会返回这个对象,最终状况就是不论怎么样都会返回result构造体 ...

April 8, 2022 · 1 min · jiezi

关于php:phpRabbit简单队列实现

RabbitMQ介绍RabbitMQ是一个开源的音讯代理和队列服务器,用来通过一般协定在齐全不同的利用之间共享数据,或者简略的将作业排队以便让分布式服务器进行解决。 1.装置RabbitMQ我这里应用的是docker装置 docker run -d --name some-rabbit -p 5672:5672 -p 15672:5672 -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password rabbitmq:3-management运行后可输出http://localhost:15672登录RabbitMQ web治理后盾默认账号:guest明码:guest我这里用的是php thinkphp6框架用compose解决依赖治理 composer require php-amqplib/php-amqplibRabbit外面有几个概念须要先理解的生产者:发送音讯端消费者:音讯生产端信通:信道是生产消费者与rabbit通信的渠道,生产者publish或是消费者subscribe一个队列都是通过信道来通信的。 信道是建设在TCP连贯上的虚构连贯,就是说rabbitmq在一条TCP上建设成千盈百个信道来达到多个线程解决,这个TCP被多个线程共享,每个线程对应一个信道,信道在rabbit都有惟一的ID ,保障了信道公有性,对应上惟一的线程应用。 RabbitMQ 为什么须要信道?为什么不是TCP间接通信? TCP的创立和销毁,开销大,创立须要三次握手,销毁须要四次离别如果不应用信道,那么援用程序就会应用TCP的形式连贯到rabbitmq,顶峰时每秒成千上万条连贯会造成资源的微小节约(一条tcp耗费资源,成千上万的tcp会十分耗费资源),而且操作系统每秒解决TCP连贯数量也是无限的,必定会造成性能瓶颈3.信道的原理是一条线程一条信道,多条线程多条信道独特应用一条TCP连贯。一条TCP连贯能够包容有限的信道,及时每秒造成成千上万的申请也不会造成性能瓶颈 这里咱们先实现简略的hello world模式实现生产者:实现消费者:运行消费者脚本申请生产者连贯此时消费者脚本打印消息:

April 7, 2022 · 1 min · jiezi

关于php:ModStartCMS-Laravel9-模块化建站系统v360内容标签增强电脑手机适配

ModStartCMS是基于Laravel的全栈极速开发CMS框架,反对动静模型配置和多模板反对,轻松搭建CMS内容管理系统。 ModStartCMS Laravel9公布v3.6.0版本,新性能和Bug修复累计17项,内容标签加强,电脑手机适配。 2022年04月05日ModStartCMS Laravel9公布v3.6.0版本,减少了以下17个个性: ·[新性能] 新闻、招聘页面新增标签显示·[新性能] 用户核心新增退出登录·[新性能] 图标大小对立调整优化·[新性能] 模块市场登录减少微信扫一扫·[新性能] 启用拜访数量统计字段viewCount·[新性能] 内容搜寻减少标签搜寻,搜寻后果页面新增标签显示·[新性能] 首页切换器电脑端和手机端适配·[系统优化] 文件上传动态门路前缀优化·[系统优化] openbase_dir平安问题提醒优化·[系统优化] 上传谬误时显示揭示错误信息·[系统优化] Select组件Key不存在时候敌对显示·[系统优化] 内容减少/编辑默认遮罩层点击不敞开·[Bug修复] 工作兼容性问题修复·[Bug修复] LayUI反复导入layer导致的弹窗抉择异样问题·[Bug修复] 一处递归寻找多级分类异样·[Bug修复] 受权登录手机端接口异样问题解决·[Bug修复] Grid初始条件首次不加载问题 ModStartCMS Laravel9,基于 Laravel 9 模块化极速开发框架,基于 Apache 2.0 开源协定,收费且不限度商业应用。 零碎演示: https://cms.demo.tecmz.com/ 下载试用: https://modstart.com/download

April 6, 2022 · 1 min · jiezi

关于php:推送测试

推送测试,。 https://www.52car.xyz/ 本文由博客一文多发平台 OpenWrite 公布!

April 6, 2022 · 1 min · jiezi

关于php:酷瓜云课堂局域网课程点播系统

零碎介绍采纳C扩大框架Phalcon开发,应用本地根底服务,次要实用于公司,学校等外部网络环境应用。是局域网内搭建课程点播零碎,课程直播零碎的很好的解决方案。 零碎性能实现了点播、直播、专栏、问答、群组、微聊、积分等。 零碎演示: 前台演示后盾演示演示账号:100015@163.com / 123456 (前后台通用) 我的项目组件后盾框架:phalcon 3.4.5前端框架:layui 2.6.8, layim 3.9.8(已受权)全文检索:xunsearch 1.4.9即时通讯:workerman 3.5.22根底依赖:php7.3, mysql5.7, redis5.0我的项目文档运行环境搭建零碎服务配置客户终端配置

April 2, 2022 · 1 min · jiezi

关于php:laravel-中根据请求路径方法匹配路由实例

需要最近因为业务性能的需要,须要依据数据库记录的申请门路(如admin/auth/menu/46/edit)、申请办法(如GET)去匹配路由实例,拿到路由实例后续做一些其余事件。 剖析其实就是路由的外围性能(将一类申请映射匹配到一个回调类型的变量)。框架自身自带的性能,查找源码是以下代码块实现的: // Illuminate/Routing/RouteCollection.phppublic function match(Request $request){ // 1. 获取路由汇合 $routes = $this->get($request->getMethod()); // 2. 匹配路由 $route = $this->matchAgainstRoutes($routes, $request); return $this->handleMatchedRoute($request, $route);}// Illuminate/Routing/AbstractRouteCollection.phpprotected function matchAgainstRoutes(array $routes, $request, $includingMethod = true){ [$fallbacks, $routes] = collect($routes)->partition(function ($route) { return $route->isFallback; }); return $routes->merge($fallbacks)->first(function (Route $route) use ($request, $includingMethod) { // 3. 遍历匹配 return $route->matches($request, $includingMethod); });}// Illuminate/Routing/Route.phppublic function matches(Request $request, $includingMethod = true){ $this->compileRoute(); foreach ($this->getValidators() as $validator) { // 4. 遍历验证器验证匹配 if (! $includingMethod && $validator instanceof MethodValidator) { continue; } if (! $validator->matches($this, $request)) { return false; } } return true;}代码大略逻辑是:遍历路由汇合,将以后申请丢给四个验证器 UriValidator、MethodValidator、SchemeValidator、HostValidator 去逐个验证匹配,验证器次要去验证匹配申请对象的 pathInfo、method、scheme、host 信息。 ...

March 31, 2022 · 2 min · jiezi

关于php:八大功能一步解决免费开源的抖音小店插件今日上线

用好工具,事倍功半,GreaterWMS插件市场今日上线了收费、开源的抖音插件,目前曾经与抖音小店API的齐全对接,具体能实现哪些性能呢?明天就跟咱们一起来看一下一、商品治理商家可实现商品同步、查问、批改、删除等标准化的商品治理留存二、库存治理商家可实现多个渠道库存和区域库存查问、同步、批改的治理场景三、订单治理可实现商家多家店铺订单展现、打单、发货、改收货地址等业务场景综合而言,这款收费、开源的GreaterWMS抖音插件目前曾经能够实现抖音小店的全副API性能,包含店铺、素材、商品、库存、订单、物流发货、售后等全副API性能。收费下载体验地址:收费、开源的抖音小店插件

March 30, 2022 · 1 min · jiezi

关于php:PHP-多进程任务-spatieasync-扩展使用说明

spatie/async 是为 PHP 基于 PCNTL 扩大开发的,可能应用多过程解决工作。 我的项目地址spatie/async 惯例应用示例对象模式use Spatie\Async\Pool;$pool = Pool::create()// 抉择执行 PHP->withBinary('/path/to/php')// 可同时运行的最大过程数->concurrency(20)// 过程实现所需的最长工夫(以秒为单位),反对小数点地位以实现更细粒度的超时->timeout(15)// 配置应该应用哪个主动加载器子流程->autoload(__DIR__ . '/../../vendor/autoload.php')// 配置循环应该休眠多长时间,而后从新查看过程状态(以微秒为单位)。->sleepTime(50000);foreach ($things as $thing) { $pool->add(function () use ($thing) { // 增加工作 })->then(function ($output) { // 工作执行结束回调函数,返回后果会以变量 $output 注入回调函数 // $pool->stop(); 提前终止 pool 工作池执行,终止后想要持续应用则须要从新创立工作池 })->catch(function (MyException $e) { // 捕获异样 }) ->catch(function (Exception $e) { // / 捕获异样,反对不做多个 })->timeout(function () { // 超时解决 });}$pool->wait();函数应用形式use Spatie\Async\Pool;$pool = Pool::create();foreach (range(1, 5) as $i) { $pool[] = async(function () { usleep(random_int(10, 1000)); return 2; })->then(function (int $output) { echo $output.PHP_EOL; });}await($pool);工作类应用形式须要创立工作类,并继承类 Spatie\Async\Task,工作执行会调用 task 工作类的 run() 办法 ...

March 28, 2022 · 2 min · jiezi

关于php:源码阅读分析PHPlaravel

源码浏览剖析-PHP-laravel如何浏览源码?浏览源码有什么用? 这个问题对于工作两年左右的程序来说就会开始去接触并且会无意关注和去理解;大都数的认为源码的浏览是为了更好的去应答面试找更高薪的工作;其实除了这样的成果以外还有的就是,能够更好地了解框架及程序的设计原理和设计思路,设计模式等;对于开发来说还能够通过对源码的浏览从中汲取良好的代码编写布局进步本人代码品质,以及对bug的问题剖析和修复能力以及性能扩大的能力等等。 因而就开始尝试对源码的浏览。 01. 遇到的问题;懵,一脸懵;在对源码的浏览中,老手在没有把握技巧的时候往往是很懵,又很晕感觉绕来绕去(叮当猫都晕了) 老手个别看源码的形式是这样的;如下为一段代码【ioc注册与解析并通过app加载启动利用db获取数据的简化过程】 <?phpclass Config{ public function get($key) { return "获取配置信息 ".$key; }}class Db{ protected $app function __construct(App $app) { $this->app = $app; } public function connection() { $this->configuration() } public function configuration() { $connections = $this->app->make("config").get("database.connections") // ... } public function select() { $this->connection() return "查问数据"; }}class Ioc{ protected $bindings = []; public function make($key) { return $this->bindings[$key]; } public function bind($key, $object) { $this->bindings[$key] = $object; }}class App extends Ioc{ public function __construct() { $this->registerCoreIocBinding(); } public function run() { // ..跳过对Controller/闭包的解析过程 $db = $this->make(db).select(); } protected function registerCoreIocBinding() { foreach ([ "config" => Config::class, "db" => Db::class, ] as $key => $value) { $this->bind($key, $value); } }}// 调用$app = new App();$app->run()?>下面的代码中定义一个ioc的对象提供对容器注册与解析的外围办法,框架中的app或application继承ioc对象,并会对框架中的外围容器对象进行注册(利用bind办法); ...

March 27, 2022 · 4 min · jiezi

关于php:PHP实现Redis并发锁示例

前言在一些业务场景中用户或用过程同时解决一块逻辑时会导致异样抵触, 因而应用并发锁只容许取得锁的那个进入下一步的解决, 未取得锁的进入期待或间接回绝操作, 这样能极大水平防止并发抵触问题. 示例Redis执行命令是单线程按程序执行的, 应用Redis命令事实锁性能也就意味着先执行的先拿到锁. 环境阐明: 上面示例中应用composer装置的predis/predis:^1.1扩大连贯Redisconfig()函数是用来获取Redis服务配置的,你能够替换成你环境中的对应值<?phpnamespace util;use Predis\Client;class Redis{ const LOCK_PREFIX = 'lk:'; //并发锁键名前缀 private static $client; /** * 单例模式获取redis连贯实例 * @return Client */ public static function client() { if (!self::$client) { $config = [ 'scheme' => 'tcp', 'host' => config('redis.host'), 'port' => config('redis.port'), ]; //没有配置明码时,不传入明码项参数 if (config('redis.password')) $config['password'] = config('redis.password'); //所有键名都带上默认前缀 self::$client = new Client($config, ['prefix' => config('redis.prefix')]); } return self::$client; } /** * 增加自定义并发锁 * 原理是redis的单线程操作 * @param string $name 锁名 * @param int $ttl 锁的存在时长,秒 * @param int $retries 重试次数 * @param int $interval 重试距离,毫秒 * @return bool 是否由以后调用加锁胜利 */ public static function lock(string $name, int $ttl = 10, int $retries = 0, int $interval = 200) { $redis = self::client(); $key = self::LOCK_PREFIX . $name; $is_lock = false; //默认是加锁失败 $interval = $interval * 1000; //毫秒转微秒 //默认只试一次,如设了重试次数则叠加 $num = 1 + $retries; for ($i = 1; $i <= $num; $i++) { //要害操作,键不存在时才设置值且带过期工夫 $is_lock = (bool)$redis->set($key, 1, 'NX', 'EX', $ttl); if ($is_lock) { break; } elseif ($retries > 0 && $i < $num) { //间歇后再重试;如以后已是最初一次重试,则不休眠 usleep($interval); } } return $is_lock; } /** * 解除自定义并发锁 * @param string $name 锁名 * @return bool 是否胜利 */ public static function unlock(string $name) { $key = self::LOCK_PREFIX . $name; return (bool)self::client()->del([$key]); }}//应用//加锁, 返回 true 示意胜利获取锁$lk = Redis::lock('lock_key');if ($lk) { //进行一些业务解决}//解锁, 业务解决完后解锁, 解锁后其他人可从新取得锁Redis::unlock('lock_key');end. ...

March 19, 2022 · 1 min · jiezi

关于php:PHP实现Hash环Hash一致性原理

援用大佬文章:Hash环 class consisTenHash{ public $serverList = []; // 服务器列表 public $virtualPos = []; // 虚构节点地位 public $virtualPosNum = 2; // 每个节点下有2个虚节点 /** 应用循环冗余算法计算出十进制校验值 **/ public function cHash($str){ $str = md5($str); return sprintf('%u',crc32($str)); } /** 从以后的服务器列表中找到适合的服务器进行寄存 **/ public function lookup($key){ $point = $this->cHash($key); $finalServer = current($this->virtualPos); foreach ($this->virtualPos as $pos => $server) { if($point <= $pos){ $finalServer = $server; break; } } reset($this->virtualPos); return $finalServer; } /** 增加一台服务器节点 **/ public function addServer($server){ if (!isset($this->serverList[$server])) { for ($i=0; $i < $this->virtualPosNum; $i++) { $pos = $this->cHash($server.'_'.$i); $this->virtualPos[$pos] = $server; $this->serverList[$server][] = $pos; } ksort($this->virtualPos,SORT_NUMERIC); } return true; } /** 删除一台服务器节点 **/ public function delServer($key){ if(isset($this->serverList[$key])){ // 删除节点 foreach ($this->serverList[$key] as $pos) { unset($this->virtualPos[$pos]); } //删除对应服务器 unset($this->serverList[$key]); } return true; }}测试代码: ...

March 18, 2022 · 1 min · jiezi

关于php:Casbin入选2022-Google编程之夏

Casbin入选2022 Google编程之夏! Google编程之夏(Google Summer of Code,GSoC),是由Google公司所主办的年度开源程序设计我的项目,第一届从2005年开始 。 “Summer of Code”之名取自1967年的“夏日之爱”风潮。较量的次要目标是激励学生参加凋谢源代码的程序设计流动。每个胜利实现我的项目的学生都会取得来自Google公司的赞助。 2022年3月7日,Google颁布了2022年度GSoC的单干社区名单。Casbin将会与200余个开源社区一道,和寰球数千名在校生实现GSoC这个全球性的在线我的项目。如果在这个寒假你是一名在校生,无妨退出Casbin。在业余导师的领导下,实现为期12周以上的编程我的项目。往年,Casbin有十余个乏味且富裕挑战性的Ideas。详见:https://github.com/casbin/Sum... <div align=center> 2020 年, Casbin 以开源社区的身份首次加入了由 Google 公司主办的Google Summer of Code 2020 和由中科院软件所、OpenEuler 社区主办的开源软件供应链点亮打算-暑期 2020 。在上述流动中,Casbin 社区共派出 7 位来自国内外(中国、法国等)互联网一线的资深社区导师,共培养、领导了国内外 15 名学生( 14 位中国同学、1 位印度同学)进行为期 3个月的开源编程流动。Casbin 我的项目已毕业的同学,有的成长为 Casbin 我的项目外围维护者、以开源大牛的身份沉闷于 GitHub ,有的毕业后全职退出腾讯微信事业部等互联网头部公司,有的凭借在 Casbin 社区的杰出经验拿到寰球顶级投行 Morgan Stanley (摩根士丹利)的 offer ,在工业界和学术界施展着重要作用。 Casbin 是一个弱小的、高效的开源访问控制框架,反对 Go, Java, No de.js, Javascript (React), Python, PHP, .NET, C++, Rust 等十几种语言。Casbin 开源我的项目由北京大学罗杨博士创建于 2017 年,外围保护团队有二十多人。Casbin 在业界具备宽泛影响力。目前曾经被 Intel 、VMware 、Orange 、RedHat 、T-Mobile 等公司开源应用,被腾讯云、Cisco 、Verizon 等公司闭源应用。具体详见 Casbin 主页。Casbin Go 主我的项目目前 GitHub 10000+ stars ,加上所有语言的实现、插件等可达到 15000+ stars 。 ...

March 17, 2022 · 1 min · jiezi

关于php:万能PHP-Curl封装类适合多个场景调用方便

一个博主本人写的PHP Curl封装,适宜多个场景,调用不便! <?phpfunction teacher_curl($url, $paras = []){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); if (isset($paras['Header'])) { $Header = $paras['Header']; } else { $Header[] = "Accept:*/*"; $Header[] = "Accept-Encoding:gzip,deflate,sdch"; $Header[] = "Accept-Language:zh-CN,zh;q=0.8"; $Header[] = "Connection:close"; } curl_setopt($ch, CURLOPT_HTTPHEADER, $Header); if (isset($paras['ctime'])) { // 连贯超时 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $paras['ctime']); } else { curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); } if (isset($paras['rtime'])) { // 读取超时 curl_setopt($ch, CURLOPT_TIMEOUT, $paras['rtime']); } if (isset($paras['post'])) { curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $paras['post']); } if (isset($paras['header'])) { curl_setopt($ch, CURLOPT_HEADER, true); } if (isset($paras['cookie'])) { curl_setopt($ch, CURLOPT_COOKIE, $paras['cookie']); } if (isset($paras['refer'])) { if ($paras['refer'] == 1) { curl_setopt($ch, CURLOPT_REFERER, 'http://m.qzone.com/infocenter?g_f='); } else { curl_setopt($ch, CURLOPT_REFERER, $paras['refer']); } } if (isset($paras['ua'])) { curl_setopt($ch, CURLOPT_USERAGENT, $paras['ua']); } else { curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"); } if (isset($paras['nobody'])) { curl_setopt($ch, CURLOPT_NOBODY, 1); } curl_setopt($ch, CURLOPT_ENCODING, "gzip"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if (isset($paras['GetCookie'])) { curl_setopt($ch, CURLOPT_HEADER, 1); $result = curl_exec($ch); preg_match_all("/Set-Cookie: (.*?);/m", $result, $matches); $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $header = substr($result, 0, $headerSize); //状态码 $body = substr($result, $headerSize); $ret = [ "Cookie" => $matches, "body" => $body, "header" => $header, 'code' => curl_getinfo($ch, CURLINFO_HTTP_CODE), ]; curl_close($ch); return $ret; } $ret = curl_exec($ch); if (isset($paras['loadurl'])) { $Headers = curl_getinfo($ch); if (isset($Headers['redirect_url'])) { $ret = $Headers['redirect_url']; } else { $ret = false; } } curl_close($ch); return $ret;}应用示例Get ...

March 17, 2022 · 2 min · jiezi

关于php:macOS-Monterey-122-搭建-GOPHP-开发环境

公司配的电脑也曾经应用了一年多了,期间也降级了零碎,应用了 beta 版的MacOS 12,体验也还是不错的,但因为应用的工夫也比拟久了,零碎缓存占了一半,并且还删不掉,以及电脑时不时卡顿后主动重启。所以就趁着春节把系统重装一下,晋升下应用体验。 1、装置 Xcode、Xcode Command Line ToolsXcode 是苹果出品的蕴含一系列工具及库的开发软件。目前最新版本是 13.2.1 能够通过App Store 装置,其次要目标是防止装置其他软件提醒更新 Xcode,软件有 12G 之大,还是找个网好点的中央装置吧。 Xcode Command Line Tools 作为 Xcode 的一部分,蕴含了 GCC 编译器。在命令行中执行以下命令即可装置: xcode-select --install间接点击装置,而后期待装置实现 xcode-select -p返回以下示意装置胜利/Applications/Xcode.app/Contents/Developer2.装置 HomebrewHomeBrew 是 macOS 软件包管理器,用来装置、降级以及卸载罕用的软件 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"或者应用国内源 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"3. 装置 iTerm2iTerm2 是 MAC 下最好的终端工具(没有之一)以及配合oh-my-zsh 及其插件,将是弱小的神器下载 iTerm2,关上会提醒挪动到 Application,或者在 Finder 中,将 iTerm 拖拽进入 Application 文件夹中。这样,你能够在 Launchpad 中启动 iTerm2。 3.1 装置 oh-my-zshoh-my-zsh Mac 自带 zsh 版本较低,能够装置最新版 brew install zsh上面装置 oh-my-zsh ...

March 15, 2022 · 4 min · jiezi

关于php:支持多种通道的-laravel-异常监控通知组件

laravel-exception-notify - 反对多种通道的 laravel 异样告诉(Bark、Chanify、钉钉群机器人、飞书群机器人、邮件、Server 酱、企业微信群机器人、息知)。性能(2.x重构版本)监控发送 laravel 利用异样反对多种通道(Bark、Chanify、钉钉群机器人、飞书群机器人、邮件、Server 酱、企业微信群机器人、息知)反对扩大自定义通道反对自定义数据收集器反对自定义数据转换器装置$ composer require guanguans/laravel-exception-notify:^2.0 -v配置注册服务laravel$ php artisan vendor:publish --provider="Guanguans\\LaravelExceptionNotify\\ExceptionNotifyServiceProvider"lumen将以下代码段增加到 bootstrap/app.php 文件中的 Register Service Providers 局部下: $app->register(\Guanguans\LaravelExceptionNotify\ExceptionNotifyServiceProvider::class);$app->boot(\Guanguans\LaravelExceptionNotify\ExceptionNotifyServiceProvider::class);申请相干通道 token 等信息BarkChanify钉钉群机器人飞书群机器人Server 酱企业微信群机器人息知配置文件中配置 token 等信息config/exception-notify.php .env 文件中配置 EXCEPTION_NOTIFY_DEFAULT_CHANNEL=dingTalkEXCEPTION_NOTIFY_DINGTALK_KEYWORD=keywordEXCEPTION_NOTIFY_DINGTALK_TOKEN=c44fec1ddaa8a833156efb77b7865d62ae13775418030d94dEXCEPTION_NOTIFY_DINGTALK_SECRET=SECc32bb7345c0f73da2b9786f0f7dd5083bd768a29b82应用app/Exceptions/Handler.php 的 report 办法中增加public function report(Exception $e){ // 默认通道 \ExceptionNotifier::reportIf($this->shouldReport($e), $e); // 指定通道 \ExceptionNotifier::onChannel('dingTalk', 'mail')->reportIf($this->shouldReport($e), $e); parent::report($e);}告诉后果 扩大自定义通道app/Providers/AppServiceProvider.php 的 boot 办法中增加 public function boot(){ // 扩大自定义通道 \ExceptionNotifier::extend('YourChannel', function (\Illuminate\Contracts\Container\Container $container){ // 返回 \Guanguans\LaravelExceptionNotify\Contracts\Channel 的实例 });}

March 15, 2022 · 1 min · jiezi

关于php:php编写的开源动态表单生成工具

表单蕴含多种input类型,包含 hiiden类型 ,text类型,radio类型,checkbox类型,textarea类型,file类型,select类型等根底类型,手写表单就是累耗时耗力开发销量太低而且代码量大了还容易写出bug,每个页面的表单遇到改变的时候巴不得长十双手去改,于是我本人开发了一个php写的表单生成工具,在业务逻辑通过配置或者链式操作去初始表单构造和数据,不论有多少页面都只须要通过配置下就行,我写的这个表单工具 反对块表单,行内表单,table类型表单,反对表单丑化 默认是layui成果,也反对jquery管制表单行为,只须要引入layui款式和js即可。在github主页demo目录也提供了示例代码运行查看成果,Form介绍:应用php编写的html表单生成工具,没有任何依赖可独立应用,反对链式操作和配置创立表单,反对表单丑化(默认为layui格调)特点:没有任何依赖可独立应用反对链式操作创立表单反对数组配置创立表单反对块表单反对行内表单反对table表单反对表单丑化(默认为layui格调)且不便扩大我的项目主页链接:github: https://github.com/mgckid/formgitee:https://gitee.com/mgckid/form 装置办法:composer require mgckid/form疾速应用:链式操作创立块表单 <?phprequire __DIR__ . '/../src/Form.php';Form::getInstance() ->form_method(Form::form_method_post) ->form_action('/') ->input_text('姓名', '', 'name', '法外狂徒张三') ->radio('性别', '', 'male', ['male' => '男', 'female' => '女'], 'male') ->checkbox('喜好', '', 'interest', ['ktv' => 'K歌', 'dance' => '跳舞', 'movie' => '看电影', 'run' => '跑步'], 'ktv,run') ->input_inline_start() ->input_text('省份', '', 'sheng', '湖北省') ->input_text('市', '', 'shi', '武汉市') ->input_text('区', '', 'qu', '武昌区') ->input_text('街道', '', 'jie', '紫阳路36号') ->input_inline_end() ->input_hidden('id', '1') ->input_text('user name', '', 'user', 'admin') ->input_password('password', '', 'password', '123456') ->radio('is active', '', 'is_active', [ ['value' => '1', 'name' => 'active'], ['value' => '0', 'name' => 'unactive'] ], 1) ->checkbox('user role', '', 'role', [ ['value' => '1', 'name' => 'boss'], ['value' => '2', 'name' => 'manager'], ['value' => '3', 'name' => 'employee'], ], '1,2') ->select('user department', '', 'department', [ ['value' => '1', 'name' => 'sales'], ['value' => '2', 'name' => 'hr'], ['value' => '3', 'name' => 'secured'], ], 1) ->form_class(LayuiForm::form_class_pane) ->input_submit('确认保留', 'class="layui-btn" lay-submit lay-filter="saveBtn"') //->input_date() //->editor() //->form_data() //->table() ->create();?>数组配置创立块表单 ...

March 14, 2022 · 6 min · jiezi

关于php:ModStartCMS模块化建站系统-v340-富文本粘贴上传自定义分页

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场领有丰盛的性能利用,反对后盾一键疾速装置,让开发者能快的实现业务性能开发。 零碎齐全开源,基于 Apache 2.0 开源协定,收费且不限度商业应用。 ModStartCMS公布v3.4.0版本,新性能和Bug修复累计18项,富文本粘贴上传,自定义分页。 2022年03月13日ModStartCMS公布v3.4.0版本,减少了以下18个个性: ·[新性能] 集成 XGPlayer 视频播放器·[新性能] 文件上传减少 MD5 文件字段,不便去重解决·[新性能] UEditor 粘贴图片主动上传性能·[新性能] 表单减少 LayoutTab 布局,可多 Tab 切换·[新性能] Grid 减少导入和导出相干快捷操作·[新性能] v-cloak默认暗藏款式减少·[新性能] 非凡空白字符解决·[新性能] 栏目默认分页可配置·[系统优化] 优化弹窗反复导入的异样问题·[系统优化] 后盾界面显示优化降级·[系统优化] 内容页面编辑布局优化·[系统优化] 弹窗只剩敞开操作时默认暗藏底部内容·[系统优化] layer 屡次引入导致的显示问题·[Bug修复] 内容模板治理中曾经设置列表显示然而理论当中无奈显示·[Bug修复] 文件抉择弹窗自定义输出链接不失效问题·[Bug修复] 内容列表页侧导航反对排序问题 运行环境: Laravel 5.1 版本 PHP 5.6 PHP 7.0MySQL >=5.0PHP Extension:FileinfoApache/Nginx Laravel 9.0 版本 PHP 8.0 PHP 8.1MySQL >=5.0PHP Extension:FileinfoApache/Nginx 前台演示: http://cms.demo.tecmz.com/ 后盾演示: http://cms.demo.tecmz.com/admin 收费下载: https://modstart.com/download

March 14, 2022 · 1 min · jiezi

关于php:MyCms-自媒体-CMS-系统-v310新增商城接口

MyCms 是一款基于Laravel开发的开源收费的自媒体博客CMS零碎,助力开发者常识技能变现。 MyCms 基于Apache2.0开源协定公布,收费且不限度商业应用,欢送继续关注咱们。 v3.1.0 更新内容 新增:购物车列表接口新增:增加商品到购物车接口新增:会员收货地址列表接口新增:会员收货地址详情接口新增:增加收货地址接口新增:更新收货地址接口修复:文章分类副名称反复修复:商品分类副名称反复 v3.0.2 更新内容 新增免费模板优化API接口字段过滤优化API接口签名加密优化属性文章返回类型优化商品分类字段名称

March 11, 2022 · 1 min · jiezi

关于php:swoolegolangpythoncclinux核心技术底层分析到微服务实战

https://www.bilibili.com/vide...

March 8, 2022 · 1 min · jiezi

关于php:大数斐波那契数列的算法

斐波那契数列简略版: <?phpfunction fibonacci($n) { if ($n <= 1) { return $n; } return fibonacci($n-1) + fibonacci($n-2);}n小于10,性能尚可。n取大数,应用工夫飙升。优化一下,空间换工夫,曾经计算出后果的存在数组里,复用。 <?phpfunction fibonacci($n) { static $cache = []; if (isset($cache[$n])) { return $cache[$n]; } if ($n <= 1) { return $n; } $temp = fibonacci($n-1) + fibonacci($n-2); $cache[$n] = $temp; return $temp;}当初性能是够了,然而如果n取的数特地大,超出整型或浮点型的范畴,那就要改用字符串存储。要实现竖式加法。 <?phpfunction fibonacci($n) { static $cache = []; if (isset($cache[$n])) { return $cache[$n]; } if ($n <= 1) { return $n; } $temp = stringAdd(fibonacci($n-1), fibonacci($n-2)); $cache[$n] = $temp; return $temp;}function stringAdd($s1, $s2) { $s1 = strval($s1); $s2 = strval($s2); $s1Length = strlen($s1); $s2Length = strlen($s2); $length = 0; if ($s1Length > $s2Length) { $length = $s1Length; $s2 = str_pad($s2, $s1Length, '0', STR_PAD_LEFT); } else { $length = $s2Length; $s1 = str_pad($s1, $s2Length, '0', STR_PAD_LEFT); } $returnRes = ''; $carry = 0; for ($i=$length-1; $i>=0; $i--) { $result = intval($s1[$i]) + intval($s2[$i]) + $carry; $res = $result % 10; $carry = floor($result / 10); $returnRes = $res . $returnRes; } if ($carry > 0) { return strval($carry) . $returnRes; } return $returnRes;}最终算法。 ...

March 8, 2022 · 1 min · jiezi

关于php:php实现web服务器

应用php(非swoole)实现tcp/http服务器。 php内置的stream系列函数 和 socket扩大提供了对网络编程的反对。socket扩大须要在编译时通过配置--enable-sockets开启,而strem系列函数则齐全是php外围内置的函数。php社区中的workman框架底层就是基于stream函数来实现的。以下代码通过stream系列函数演示php如何实现简略的tcp/http等服务器 1:单过程阻塞模式<?phpclass Server{ /** * @var false|resource */ private $socket; /** * 是否http服务器 默认tcp服务器 * @var bool */ private $isHttp = false; public function __construct(string $address) { $this->socket = @stream_socket_server($address, $errNo, $errMessage); if (!is_resource($this->socket)) { throw new InvalidArgumentException("参数异样:" . $errMessage); } } public function isHttp(bool $bool): self { $this->isHttp = $bool; return $this; } /** * 启动服务器 */ public function run() { while (true) { $conn = @stream_socket_accept($this->socket); if ($conn) { if ($this->isHttp) { //http server $data = "Hello World"; $response = "HTTP/1.1 200 OK\r\n"; $response .= "Content-Type: text/html;charset=UTF-8\r\n"; $response .= "Server: MyServer1\r\n"; $response .= "Content-length: " . strlen($data) . "\r\n\r\n"; $response .= $data; fwrite($conn, $response); fclose($conn); } else { // tcp server while ($message = fread($conn, 1024)) { // 被动退出 if (trim($message) == 'quit') { echo "close\n"; fclose($conn); break; } echo 'I have received that : ' . $message; fwrite($conn, "OK\n"); } } } } }}$server = new Server("0.0.0.0:2345");// 启动 tcp 服务器$server->run();// 启动 http服务器//$server->isHttp(true)->run();http服务浏览器拜访http://127.0.0.1:2345/看能够看到输入hello world ...

March 7, 2022 · 3 min · jiezi

关于php:PHP-基于-SWX-框架搭建RPC微服务支持

前言官网地址:SW-X框架-专一高性能便捷开发而生的PHP-SwooleX框架 心愿各大佬举起小手,给小弟一个star:https://github.com/swoolex/swoolex 场景一在FPM我的项目中,很多业务状况下是挺无奈的,例如某个业务须要用到发送短信。 通常这类业务不论短信是否发送胜利,都不应该应该影响该接口的执行后果,又或者是执行效率(CURL梗塞到了上面的业务代码)。 以往,这种状况个别会把发送短信当作一个工作,投递到某种音讯队列中,而后在php-cli下应用多过程的形式另起一个独立的过程进行后盾耗费执行。 因为受到PHP过程模型的影响,如果FPM的过程被梗塞,该队列就有可能被间接挂掉。 同时,这种办法的性能耗费重大,也不便于日常保护。 场景二如果是容许异步执行的逻辑,在FPM下还有优化的空间,那如果是须要同步执行的代码呢。 例如须要调用百度地图的经纬度解析接口,这种同时须要期待取得申请后果,能力往下执行。 假如咱们有一个我的项目,7个接口须要用到该接口,通常状况下都会基于框架,封装成一个扩大类,又或者是一个公共的函数进行调用。 但当公司业务扩张,可能会产生不同的业务线,但不同的业务所应用的语言,框架都不肯定统一(不是所有公司都喜爱一个框架,启用多利用架构的)。 这时候扩大封装的形式就没方法应用了,因为咱们可能会copy有数份雷同的代码到各个利用下,当百度地图接口降级时,咱们还有可能会脱漏某一个利用下的代码没有降级实现,从而导致业务谬误,产生不可估量的损失。 场景三如果说第三方接口还能够容许COPY封装的扩大到多个利用下,那公共的业务逻辑组件化封装就没方法了。 例如会员注册,当我的项目刚起步时,可能咱们须要会员注册能力下单,突然某天公司业务做大了,须要开发出渠道API,让渠道商部署平台,其中又有会员注册的性能。 之后,公司发现如果应用二维码间接下单,又会更加不便市场推广,就变成须要反对下单时间接注册用户。 再之后,又一堆后盾创立会员、电话下单创立会员、积分兑换商城创立会员等等。 从一个会员注册的Model,突然变成了N个利用的会员注册,这时候应用单个利用的Model封装曾经无奈承载业务了。 SW-X的微服务SW-X的微服务都是为了应答以上这些场景所诞生,底层应用了TCP通信协定,反对基于AES的数据加解密反对,官网提供了Swoole/FPM下的RPC客户端,并提供了纯基于Redis存储管理的RPC服务中心,可进行WEB界面化的服务日常治理。 微服务的部署条件1、须要先装置Redis服务,与PHP-Redis扩大2、须要筹备2个端口,与2份SW-X框架源码,因为服务中心(http)与微服务服务端(rpc)是须要别离启动不同的服务端口。材料筹备先将Redis改成6379端口(默认),明码改成123456。 平安组凋谢一个9501端口,用于搭建微服务-服务中心。 平安组凋谢一个9502端口,用于搭建微服务-服务端。 部署微服务-服务中心1、将SW-X框架源码解压(拉取)到swoole_web/目录下,具体地址也能够改成本人测试的。 2、批改/config/server.php文件下的port端口为9501 3、批改/config/rpc.php文件下的http_rpc_is参数为true,示意以后HTTP服务为RPC服务中心利用。同时,该文件下的http_rpc_user_list参数为服务中心的账号配置,默认的超级账号密码是:swoolex。 4、关上shell界面,执行以下代码: # 进入目录cd /www/wwwroot/swoole_web/# 装置服务中心-web组件php sw-x rpc start装置胜利会输入服务中心对应的路由地址,而后在shell界面,持续输出: # 启动HTTP服务后盾运行php sw-x start http -d实现后,就能够在浏览器关上IP地址:9501/HttpRpc/login拜访到微服务-服务中心登陆地址了。 具体UI如下图: 部署微服务-服务端1、将SW-X框架源码解压(拉取)到swoole_rpc/目录下,具体地址也能够改成本人测试的。 2、批改/config/server.php文件下的port端口为9502 3、关上shell界面,执行以下代码: # 进入目录cd /www/wwwroot/swoole_rpc/# 启动RPC服务[不退后台运行]php sw-x start rpc服务日常治理登入服务中心,咱们能够看到有一个框架默认的测试服务,如下: 1、服务调试点击调试按钮,能够间接对该服务进行在线调试,如下图: 能够对调试参数进行在线设置和保留,点击调试后对应的后果会在右侧窗口滑出。 2、服务统计同时,服务中心也反对统计单个服务在一小时内的申请量,须要在RPC服务端,批改/config/rpc.php的配置参数,如下: [ // +----------------------------- // | 服务申请统计相干 // +----------------------------- // 是否开启统计 'chat_status' => true, // 统计记录的Redis连接池标识 'chat_redis_driver' => 'default', // 统计记录保留天数 'chat_days' => 14,];将chat_status参数改为true,因为微服务的统计是依赖Redis计数器实现,所有微服务服务端也须要配置好Redis连接池(连接数必须大于1),而后重启RPC服务端即可。 ...

March 7, 2022 · 2 min · jiezi

关于php:ModStartCMS-模块化建站系统-Laravel-90-版-v330

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场领有丰盛的性能利用,反对后盾一键疾速装置,让开发者能快的实现业务性能开发。 零碎齐全开源,基于 Apache 2.0 开源协定,收费且不限度商业应用。 ModStart 致力于服务开发者,为开发者节省时间,让大家有更多的工夫读书、健身、开源、投资、帮敌人、陪家人,感谢您反对咱们的开源事业。 ModStartCMS是基于Laravel的全栈极速开发CMS框架,反对动静模型配置和多模板反对,轻松搭建CMS内容管理系统。 v3.3.0 事件驱动加强,组件反对丰盛 2022.03.06 新增:文件上传事件触发 DataFileUploadedEvent,减少 DriverName新增:图标库新增支付宝图标新增:管理员登录胜利、登录失败、退出事件触发新增:富文本编辑器工具栏定制适配新增:Grid 减少导入和导出相干快捷操作新增:v-cloak默认暗藏款式减少优化:弹窗只剩敞开操作时默认暗藏底部内容优化:表单页面组件overflow显示优化优化:Detail 记录不存在显示问题修复:模块配置不存在时不能卸载问题修复:Decimal 组件不能为正数问题修复:文件抉择弹窗自定义输出链接不失效问题

March 7, 2022 · 1 min · jiezi

关于php:对于-PHP-框架我们真的需要使用-LTS-版本吗

封面图片源自:pexels.com前言最近随着 Laravel 9 的公布,有人发现了一个乏味的事件,那就是 Laravel 9 最后开发时是作为 LTS 版本公布的,来接替 Laravel 6,在正式公布时也是以 LTS 版本公布,而在正式公布后不久,Laravel 的官网文档中却将 Laravel 9 的 LTS 字样进行了移除,使得 Laravel 9 变成了一个「一般版本」。 对于一般版本,Laravel 提供了 18 个月的谬误修改与 2 年的安全性更新。而对于长期反对版本,则提供了 2 年的谬误修改,与 3 年的安全性更新。在做事件的过程中,咱们总怕呈现问题,在做完一件事件之后,咱们也常说「如果它能用,就不要去轻易的改变它」,这句话在过来实用,在将来一样也实用,这是前辈人总结换来的教训。只有不做事,就不会出错 而随着时代的演变,软件的迭代速度之快,有些软件两年一个大版本,有的甚至一年一个大版本,而其的反对周期个别也就两三年,如果你的业务可能在生存上来,可能过了两三年,你所应用的版本就与最新的差了好几个大版本了,而且可能你应用的版本曾经被官网进行了反对,这时候如果你不降级你所应用的版本,就有可能让你的业务裸露在危险中。 什么是 LTS ,它有什么劣势?长期反对 (英语:Long-term support,缩写:LTS)是一种软件的产品生命周期政策,特地是开源软件,它减少了软件开发过程及软件版本周期的牢靠度。长期反对缩短了软件维护的周期;它也扭转了软件更新(补丁)的类型及频率以升高危险、费用及软件部署的中断工夫,同时晋升了软件的可靠性。以上是摘自 Wikipedia 对于 LTS 的形容,能够看进去, LTS 相较于后面咱们探讨到的问题仿佛有了一个无效的解决方案,那就是咱们当初在立项的时候,就间接抉择 LTS 版本。LTS 相较于一般版本,升高了更新频率,也缩短了反对工夫。这样,咱们就能够保障咱们的我的项目应用的框架或者库有足够长的反对(性能、平安)工夫,从而升高平安危险,以及保护老本。 LTS 的劣势LTS 的反对,都是取决于软件厂商的反对力度,有的可能反对 2 年,有的可能 3 年,有的可能 5 年。 另外这段漫长的反对工夫外面,软件的一般版本可能曾经减少了好几个版本,引入了很多新个性,而你,可能都会与这些新个性无缘。 这还算不上最麻烦,麻烦的事件还在前面。 如果放在以前,你问我「在新开我的项目的时候,你会抉择 LTS 版本,还是最新版本?」我肯定会毫不犹豫的「抉择 LTS 版本」,因为没有公司可能回绝「稳固」这一利好因素,毕竟公司大多数时候都会准求稳固为主。 然而如果放到当初,我会通知你「我会抉择以后较新的稳固版本」,当你的业务能够始终被反对上来的时候,两年,三年,五年,甚至更长,这种与主版本脱节的落差就会越来越大,一次性降级的危险也就越来越大,你也就更加不敢轻易降级,可能会从而导致你所应用版本永远定格在了那里。 以 Laravel 为例,一旦你有了首选 LTS 的想法,如果你在 2015 年创立我的项目的时候抉择了 Laravel 5.1 LTS,那么在两年后的 2017 年, Laravel LTS 版本迎来了 5.5 版本的更新。这时候,你两头就差了 5.2、5.3、5.4 三个版本的跨度,尽管这三个版本的降级指南中的内容中都并不算多,除了框架自身,你还要兼顾框架依赖局部库,甚至你可能还要关照你的 PHP 版本等等。 ...

March 6, 2022 · 2 min · jiezi

关于php:PHP-多容器框架-imi-v214-发布支持将imi项目打包为phar文件

imi 介绍imi 是一款反对长连贯微服务分布式的 PHP 开发框架,它能够运行在 PHP-FPM、Swoole、Workerman、RoadRunner 等多种容器环境下。 imi 反对开发 Http 接口,以及 Http2、WebSocket、TCP、UDP、MQTT 等常驻内存服务。 imi 领有丰盛的性能组件,v2.1 版本内置了 2 个分布式长连贯服务的解决方案。 imi 框架当初曾经稳固运行在:文旅电商平台、物联网充电云平台、停车云平台、领取微服务、短信微服务、钱包微服务、卡牌游戏服务端、数据迁徙服务(虎扑)等我的项目中。 Github:https://github.com/imiphp/imi文档:https://doc.imiphp.com/收费视频教程列表:https://www.imiphp.com/course... QQ群:17916227微信: 性能个性拥抱强类型多容器(PHP-FPM、Swoole、Workerman、RoadRunner)无心智累赘的长连贯分布式计划(网关/音讯队列)常驻内存毫秒级热更新,保留即失效自研现代化 ORM (反对数据库、Redis、Swoole Table)宏定义更多功能等你来挖掘…… v2.1.4 更新日志加强Phar 反对 (#288)Grpc 性能改良和修复 (#289)反对定义命令行名称宰割符 (#290)反对监听 Swoole WebSocket Server disconnect 事件优化Phar 模式强制禁用热更新优化 Workerman Worker 类中的默认动态属性值优化代码修复修复 Http 路由疏忽大小写 (#287)开发团队宇润,94年植树节生,无锡人。imi 框架创始人,Swoole 内核开发组成员,宇润 PHP 系列组件作者。 开源我的项目包含但不限于:imi、PaySDK、YurunHttp、Guzzle-Swoole、YurunOAuthLogin、ChineseUtil 等 Github:https://github.com/Yurunsoft 次要奉献:imi 发起人,负责次要开发和保护 NHZEX Github:https://github.com/NHZEX 次要奉献:代码优化、bug修复、测试优化、PHP 8.1 兼容 封尘,93年,狮子座,宣城人。imi 框架开发组成员,开源作者。 开源我的项目包含但不限于:fcup、mjs、university font icon library、fcphp、fcblog 等Github:https://github.com/lovefc 次要奉献:imi 晚期用户,imi 1.0、2.0 官网页面作者 ...

March 4, 2022 · 1 min · jiezi

关于php:PHP-基于-SWX-框架搭建高性能API架构五

前言官网地址:SW-X框架-专一高性能便捷开发而生的PHP-SwooleX框架 心愿各大佬举起小手,给小弟一个star:https://github.com/swoolex/swoolex 1、404接口配置HTTP服务中,当查找不到对应的路由时,会加载/config/route.php配置文件中的404配置。 以下为具体的参数配置项: <?phpreturn [ // 找不到路由的时候,是否启用自定义的谬误处理程序 '404' => true, // 自定义的谬误处理程序,只须要提供一个类的命名空间地位即可 'error_class' => '\\box\\http_error',];上面咱们关上/box/http_error.php文件,并批改成以下代码: <?phpnamespace box;use \x\controller\Http;class http_error extends Http{ /** * 入口 * @todo 无 * @author 小黄牛 * @version v1.0.1 + 2020.05.29 * @deprecated 暂不启用 * @global 无 * @return void */ public function __construct() { return \x\Restful::code(\x\Restful::ONROUTE())->callback(); }}因为下面应用\x\Restful组件,抛出了一个ONROUTE状态码,所以对应的Restful配置也要进行批改: /restful/default/code.php批改成如下代码: <?phpreturn [ 'ERROR' => 0, // 默认失败状态码 'SUCCESS' => 1, // 默认胜利状态码 'ACTION_ERROR' => 40001, // 权限校验失败 'ONROUTE' => 40004, // 不存在的接口];/restful/default/msg.php批改成如下代码: ...

March 4, 2022 · 3 min · jiezi

关于php:Casbin荣获2021年度科创中国开源创新榜优秀开源产品

为了响应党中央、国务院高度重视开源软件倒退的需要(国家软件倒退策略将培养开源生态作为重点工作,国民经济和社会倒退“十四五”布局和2035年近景指标大纲明确提出反对开源社区等翻新联合体倒退),深刻解决国家科技重大策略需要,解决卡脖子问题,实现国产芯片、操作系统、根底软件、大数据人工智能等系列核心技术的自主可控。 中国科学技术协会设立了2021年度“科创中国”开源翻新榜,评审工作于2021年9月24日在中关村论坛-开源翻新倒退论坛上启动,榜单评审触达1869项开源产品,通过20位来自全国学会、中国开源软件推动联盟、Apache基金会、清华、北大、北航等机构的开源专家评审,最终推出年度优良开源产品50项。 在本年度的“科创中国”开源翻新榜优良开源产品评比中,Casbin从一众创新性、贡献度和影响力都极为卓越的开源产品中怀才不遇,榜上有名! Casbin访问控制框架Casbin是一个弱小的、高效的开源访问控制框架,反对 Go, Java, Node.js, Javascript (React), Python, PHP, .NET, C++, Rust等十几种语言。Casbin在业界具备宽泛影响力。目前曾经被Intel、VMware、Orange、RedHat、T-Mobile等公司开源应用,被腾讯云、Cisco、Verizon等公司闭源应用。具体详见 Casbin主页。Casbin Go主我的项目目前GitHub 10000+ stars,加上所有语言的实现、插件等可达到15000+ stars。依照在GitHub的Star数量,Casbin在Go语言中排名第一,在java语言中排名第四,在Node.js语言中排名第二,在PHP语言中排名第五,在Python语言中排名第一,在.NET语言中排名第一,在Rust语言中排名第二,在C++语言中排名第一。 Casdoor是Casbin社区推出的具备Web治理界面的OAuth, OIDC, SAML单点登录平台。Casdoor集成了Casbin技术来帮忙使用者解决用户治理、权限治理的难题,使用者无需开发用户登录注册等与用户鉴权相干的一系列性能,只需几个步骤,简略配置,与用户的主利用配合,便可齐全托管用户的用户模块,简略省心,功能强大。 目前,Casbin不单单是外围产品访问控制框架的名字,而已逐步成为了一个大型权限类开源社区,目前Casbin社区推出了系列开源软件,如Casdoor单点登录零碎、Casnode论坛等,在国内上利用非常宽泛。 对于Casbin官网:https://casbin.org 开源仓库:https://github.com/casbin 官网QQ群:546057381

March 3, 2022 · 1 min · jiezi

关于php:记一次奇怪的接口报错及解决

记一次解决接口报错 The GET method is not supported for this route. Supported methods: POST.的bug; 问题体现: 服务器上部署了两套雷同代码的我的项目A和B,别离以不同的域名拜访,提交代码时同步更新。以POST形式申请某个特定接口时,A可能失常响应,B却无论如果都是报错The GET method is not supported for this route. Supported methods: POST. 奇怪的是,本地开发是失常的,无奈复现此bug, 线上服务器里A我的项目亦是失常拜访,B我的项目代码与A完全相同,仅配置文件.env与域名受权文件不同。 搜寻解决办法,尝试php artisan route:clearphp artisan route:cache问题仍旧,通过php artisan route:list打印出我的项目的所有路由,发现B我的项目的路由是正确的,揣测问题可能与我的项目无关; 关上B我的项目的Debug设置,显示该报错的追踪门路,发现框架对该申请的Method判断为GET, 而该路由所定义方法为POST,所以间接抛出谬误The GET method is not supported for this route. Supported methods: POST. 问题查到这里陷入了死胡同,我无奈了解为什么以POST发动的申请,流程达到框架中解决时, 申请的Method会变成GET; 纠结一天没有后果。第二天判断可能是nginx到框架过程中出的问题,尝试调取Nginx的Access日志来判断问题起因,终于发现 127.0.0.1 - - [02/Mar/2022:11:29:48 +0800] "POST /api_path/action_name HTTP/1.1" 301 162 "-" "PostmanRuntime/7.29.0"127.0.0.1 - - [02/Mar/2022:11:29:49 +0800] "GET /api_path/action_name HTTP/1.1" 405 26147 "http://host_domain/api_path/action_name" "PostmanRuntime/7.29.0"在Nginx这里,POST申请被301重定向成GET,以GET去申请POST的路由当然会报错;而这个301则是宝塔环境自带的“强制HTTPS”的设置导致,开启该设置之后,nginx的配置文件会减少以下代码 ...

March 2, 2022 · 1 min · jiezi

关于php:php内存泄露的原因分析和垃圾回收机制的探讨

最近在写某个脚本时,在循环内反复调用了某个办法。依照以前的了解,办法在执行实现后,局部变量就生效了,它申请内存就开释了,但实际上并非如此。 <?phpclass Foo{ public $var = '3.1415962654';}$baseMemory = memory_get_usage();for ( $i = 0; $i <= 100000; $i++ ){ f($i, $baseMemory);}function f($i, $baseMemory){ $a = new Foo; $a->self = $a; if ( $i % 500 === 0 ) { echo sprintf( '%8d: ', $i ), memory_get_usage() - $baseMemory, "\n"; }}运行下面这段代码后发现,php的内存并不是来到函数就开释,而是达到肯定值后才会进行开释(只探讨php5.3之后的机制)。官网的说法是 首先,实现垃圾回收机制的整个起因是为了,一旦先决条件满足,通过清理循环援用的变量来节俭内存占用。在PHP执行中,一旦根缓冲区满了或者调用gc_collect_cycles() 函数时,就会执行垃圾回收。也就是说只有根缓冲区满了,php就会执行垃圾回收,开释那些没用到的内存。 那么什么是“根缓冲区”呢?根缓冲区就是拿来寄存所有可能根(能够了解为php里的变量)的容器,他的值是10000,能够批改PHP源码文件Zend/zend_gc.c中的常量GC_ROOT_BUFFER_MAX_ENTRIES,而后从新编译PHP,来批改这个10000值。 如果没有批改过根缓冲区的值,察看下面的代码就会发现,每10000次,就会执行一次垃圾回收,也就是根缓冲区在第一万次的时候被填满了。 那么问题就来了,如果我的单个变量占内存比拟大,那么根缓冲区还没填满,就有可能把内存用完了,也就来不及从新分配内存,这就是可能导致内存透露的起因之一。比方上面这个例子 <?phpini_set('memory_limit', '128M');class Use10MClass{ public $var = null; public function __construct() { $this->var = str_pad('1', 10 * 1024 * 1024); }}$baseMemory = memory_get_usage();echo "以后内存:", memory_get_usage(), "\n";for ($i = 0; $i <= 100; $i++) { test($i, $baseMemory);}function test($i, $baseMemory){ $b = new Use10MClass(); $b->self = $b; echo sprintf('%8d: ', $i), memory_get_usage() - $baseMemory, "\n";}在第十一次循环时,就报了PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 10485785 bytes) 这个谬误,因为单个变量所耗费的内存过多,根缓冲区才被填了11个,还没来得及执行垃圾回收内存就被撑爆了。解决办法有两种 ...

March 2, 2022 · 1 min · jiezi

关于php:PHP字符串移除emoji字符

前言在做一个电商我的项目应用微信领取发动订单付款时,遇到遇到因商品形容字段含有 emoji 字符微信接口返回字符集超出UTF-8范畴的谬误提醒。于是特意在网上查找了些解决方案,有通过正则过滤的,也有通过字符集过滤的,通过衡量我最终在我的项目中采纳的是字符集过滤的计划。 正则过滤计划解决原理是UTF-8编码长度超过3个字节(个别中文3个字节)的全副替换成空字符串 $str = '安全,喜乐。PA,XL.';$str = preg_replace_callback( '/./u', function (array $match) { return strlen($match[0]) > 4 ? '' : $match[0]; }, $str);echo $str; //安全,喜乐。PA,XL.字符集过滤计划先把字符集转由UTF-8转成GBK,再由GBK转成UTF-8,这个过程就会把emoji字符解决掉。 mb_convert_encoding()函数转换后的emoji会变成?符号,须要另外再剔除。iconv()函数的解决成果能比拟合乎预期,举荐应用。 $str = '安全,喜乐。PA,XL.';$str = mb_convert_encoding($str, 'GBK', 'UTF-8');$str = mb_convert_encoding($str, 'UTF-8', 'GBK');echo $str; //安全,喜乐。PA,XL.??$str = '安全,喜乐。PA,XL.';$str = iconv('UTF-8', 'GBK//IGNORE', $str);$str = iconv('GBK', 'UTF-8//IGNORE', $str);echo $str; //安全,喜乐。PA,XL.参考PHP正则模式修饰符特殊字符(包含emoji)梳理和UTF8编码解码原理

March 1, 2022 · 1 min · jiezi

关于php:利用钉钉内网穿透上传php项目时遇到的问题

内网穿透之HTTP穿透当咱们依照钉钉官网教程启动钉钉内网穿透后,命令行窗口显示为如上图片来揭示咱们启动胜利。 如图有两个链接,一个为http链接,一个为https链接。通常状况下咱们只能拜访http链接,具体起因就不在此阐明了。 之后如果想通过此链接拜访到咱们的php我的项目就须要在本地开启一个http-server服务。具体操作为: 下载node.js官网地址: https://nodejs.org下载实现后在命令行输出命令$ node -v以及$ npm -v查看版本,确认是否装置胜利。下载http-server 在终端输出:$ npm install http-server -g开启 http-server服务终端进入指标文件夹,而后在终端输出: http-server -c-1当咱们开启http-sever服务当前咱们就能够在局域网下拜访咱们的PHP我的项目。在应用内网穿透时咱们会发现thinkPhp5框架中是将我的项目部署在80端口上的,比方咱们通常以http://127.0.0.1/MicroCourse2021-main/thinkphp5.0guide-step1/public来启动一个PHP我的项目,如果咱们在127.0.0.1后加上:80来应用80端口的话也能够失常启动我的项目。 然而内网穿透是默认将咱们的URL映射到8080端口,所以我更改了thinkPhp5的启动端口,以下是须要更改的文件的地位: "D:\xampp\apache\conf\httpd.conf"找到以下字段,将80改为8080。 #Listen 12.34.56.78:80Listen 80之后咱们再重启一下Apache服务,如果产生报错,很有可能是8080端口被其余过程所占用,我么能够在xampp中进入如图的选项中查看端口占用状况之后在工作管理器中完结相应过程即可,之后咱们再进行拜访相应的URL就能够从其余设施(不在同一局域网)的状况下拜访咱们的PHP我的项目。 刚通过以上操作后还在想像阿里这么大的公司,为什么给出的服务这么不便捷,连批改映射端口的性能都没有,之后回过头来再看一看发现原文中写的很明确: 执行以下命令,启动钉钉内网穿透。ding ngrok --subdomain dingabcde --port 8080--subdomain示意域名前缀,--port代表映射的端口咱们只须要在启动的时候批改个参数就行,只因为我看文档的时候太焦急,连这么显著的提醒都没看到,所以这也通知咱们当前在看官网文档时肯定要认真,不能因为内容少就只是扫两眼完事。

March 1, 2022 · 1 min · jiezi

关于php:PHP-基于-SWX-框架搭建高性能API架构三

前言官网地址:SW-X框架-专一高性能便捷开发而生的PHP-SwooleX框架 心愿各大佬举起小手,给小弟一个star:https://github.com/swoolex/swoolex 1、什么是Restful组件在SW-X中,Restful组件是对API返回值构造的封装反对。\x\Restful类反对定义返回值的构造、Code->Msg关联、返回值强类型转换、抛出的数据类型转换、响应的申请头定义(跨域反对)。 2、Restful的设置API返回值的应用,次要依赖/restful/目录中的config.php配置我的项目,初始化默认配置如下: <?phpreturn [ // 返回值类型 反对 json|xml 'type' => 'json', // 默认的返回值格局 'default' => [ 'force' => true, // 是否强制返回值 int|double|null类型转换 'status' => 'code', // 状态码字段名 'tips' => 'msg', // 形容字段名 'result' => 'data', // 后果集字段名 'set' => [], // 默认后果集 'headers' => [], // 响应头,可用于跨域设置(v2.5.23版本前反对) ],]其中default为默认的数据结构,当咱们不应用\x\Restful::make('新的下标')指定新的返回值构造时,默认应用该构造,如果咱们须要设置新的返回值构造,只须要复制default的数组构造,将下标改为新值即可。 同时,/restful/目录下还存在一个default目录,该目录是对应default默认的返回值构造,用于寄存code状态码和msg状态阐明。 如果设置了新的数据结构,则须要复制default目录,并重命名为对应的下标名。 上面咱们来看下default目录下的两个文件: Code状态码,/restful/default/code.php: <?php// 状态码治理return [ 'ERROR' => 0, // 默认失败状态码 'SUCCESS' => 1, // 默认胜利状态码];在理论利用时,咱们只须要通过\x\Restful::状态码键名()的形式来读取对应的状态码值,例如应用SUCCESS的状态码就用\x\Restful::SUCCESS()。 Msg阐明,/restful/default/msg.php: <?php// 状态阐明治理return [ // 默认谬误状态码对应的tips 'ERROR' => [ 'default' => '申请失败', // 默认值 ], // 默认胜利状态码对应的tips 'SUCCESS' => [ 'default' => '申请胜利', // 默认值 'test' => '测试msg', ],];状态码阐明是一个二维数组,一维下标须要对应状态码的下标,同时必须存在一个名为default的二维下标。 ...

March 1, 2022 · 2 min · jiezi

关于php:PHP-基于-SWX-框架搭建高性能API架构二

1、开启主动热重载开发阶段中,对swoole我的项目启动主动热更新代码是很有必要的,不然每次更新了代码,都须要手动reload一次服务。 SW-X的热重载除了对框架配置文件、公共函数、Swoole-Event事件有效外,其余文件的批改都无效。 只须要批改,/config/reload.php 下的配置文件即可开启: <?phpreturn [ // 是否启用热重载 'status' => false, // 检测的间隔时间(S) 'interval_time' => 3, // 只监听的文件后缀 'monitor_suffix' => 'php,html', // 监听的目录 'monitor_list' => [ '/app/', '/extend/', ], // 移出监听的目录 'remove_list' => [],];2、创立控制器版本目录/app/http/v1_0_1/controller/应用 INFO_PATH 路由格调,创立一个 商品查问 接口 : 实现的文件地址: /app/http/v1_0_1/controller/shop/select.php代码如下: <?phpnamespace app\http\v1_0_1\controller\shop;use x\controller\Http;class test1 extends Http{ public function index() { return $this->fetch('演示接口地址'); }}当初通过URL拜访:http://IP地址:端口/v1_0_1/controller/shop/select 就能拜访到这个接口了。 3、设置路由映射理论开发中,咱们是不想把版本号显示给前端的,例如下面的接口,咱们只想展现为: http://IP地址:端口/api/shop/select为了对应这种场景,SW-X反对在 /box/route.php 自定义路由表文件中,应用 \x\Route 类 进行镜像绑定: <?phpuse x\Route;// 镜像映射Route::mirror([ '/v1_0_1/controller/' => '/api/',]);保留胜利后,须要先stop,再start服务后失效。 留神:路由绑定胜利后,原来的路由地址会生效,不会保留。

February 28, 2022 · 1 min · jiezi

关于php:ModStartCMS模块化建站系统-v330-组件功能升级事件触发增强

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场领有丰盛的性能利用,反对后盾一键疾速装置,让开发者能快的实现业务性能开发。 零碎齐全开源,基于 Apache 2.0 开源协定,收费且不限度商业应用。 ModStart 致力于服务开发者,为开发者节省时间,让大家有更多的工夫读书、健身、开源、投资、帮敌人、陪家人,感谢您反对咱们的开源事业。 ModStartCMS是基于Laravel的全栈极速开发CMS框架,反对动静模型配置和多模板反对,轻松搭建CMS内容管理系统。 ModStartCMS公布v3.3.0版本,新性能和Bug修复累计11项,组件性能降级,事件触发加强。 2022年02月28日ModStartCMS公布v3.3.0版本,减少了以下11个个性: ·[新性能] 管理员登录胜利、登录失败、退出事件触发 ·[新性能] 文件上传事件触发 DataFileUploadedEvent,减少 DriverName ·[新性能] 支付宝减少新版领取对接 ·[新性能] 领取对接形式降级 ·[系统优化] 长申请监控、长SQL监控、多SQL申请监控 ·[系统优化] 表单页面组件overflow显示优化 ·[系统优化] Decimal 组件不能为正数问题 ·[系统优化] Detail 记录不存在显示问题 ·[系统优化] GridFilter 下拉抉择、单选匹配逻辑优化 ·[Bug修复] 后盾页面菜单图标不显示问题 ·[Bug修复] 用户后盾VIP列表批改不失效问题修复 运行环境: Laravel 5.1 版本 PHP 5.6 PHP 7.0 MySQL >=5.0 PHP Extension:Fileinfo Apache/Nginx Laravel 9.0 版本 PHP 8.0 PHP 8.1 MySQL >=5.0 PHP Extension:Fileinfo Apache/Nginx 前台演示: http://cms.demo.tecmz.com/ 后盾演示: http://cms.demo.tecmz.com/admin 下载试用:     https://modstart.com/download

February 28, 2022 · 1 min · jiezi

关于php:一个-MySQL-在线-DDL-工具-ptonlineschemachange

在运维线上MySQL数据库时,咱们总会对数据表进行 DDL 变更,批改增加字段或者索引。在对表进行 DDL 时,会锁表,当表比拟小比方小于1w上时,对前端影响较小,过后遇到千万级别的表就会影响前端利用对表的写操作。 pt-online-schema-change 是 percona 公司开发的一个工具,在percona-toolkit包外面能够找到这个性能,它是一个在线DDL工具,能够实现在线数据表 DDL 操作。 应用办法比方须要运行 SQL 的 DDL 语句 ADD COLUMN mode tinyint(4) DEFAULT NULL AFTER status能够通过如下命令进行 nohup pt-online-schema-change \ --charset=utf8 \ --no-version-check \ --user="数据库用户" \ --password="数据库明码" \ --host="数据库地址" \ P=3306,D="数据库",t="数据表" \ --alter "ADD COLUMN mode tinyint(4) DEFAULT NULL AFTER status" \ --execute &参数阐明 --user= 连贯mysql的用户名--password= 连贯mysql的明码--host= 连贯mysql的地址P=3306 连贯mysql的端口号D= 连贯mysql的库名t= 连贯mysql的表名--alter 批改表构造的语句--execute 执行批改表构造--charset=utf8 应用utf8编码,防止中文乱码--no-version-check 不查看版本,在阿里云服务器中个别退出此参数,否则会报错工作过程创立一个和要执行 alter 操作的表一样的新的空表构造(是 alter 之前的构造) 在新表执行 alter table 语句(速度应该很快) ...

February 26, 2022 · 1 min · jiezi

关于php:ModStart拥抱新技术率先支持-Laravel-90

Laravel 9.0 于 2022年2月8日公布,在公布后的第一工夫 ModStart 技术团队进行了新技术钻研和新框架的适配。ModStart + Laravel 9.0 版于2月11日开始内测。 通过两个星期的内测,目前 3.2.0 正式对外公布。 框架将反对两个LTS版本ModStart 后续的迭代同时反对 Laravel 5.1 和 Laravel 9.0 两个版本,无论应用的是哪个版本,都将放弃继续迭代更新,让您无需担心。 模块市场模块市场中的模块默认反对 Laravel 5.1,通过技术架构的革新,目前局部曾经适配 Laravel 9.0,在模块性能介绍页面中,环境示意对于两个版本的反对状况。laravel5示意反对5.1版本,laravel9示意反对9.0版本,在模块下载前请查看模块对于框架的反对状况。 ModStart 将会不断创新,放弃跟进前沿技术,帮您的业务稳步向前。

February 26, 2022 · 1 min · jiezi

关于php:私有模块上线用它来开发外包项目真香

ModStart的定位是为减速我的项目或产品的配置化开发,在开发过程中积淀属于本人的模块,能够一直降级迭代。 公有模块介绍现阶段,上线的模块审核通过后都会呈现在模块市场中,其他人能够拜访和购买下载,在局部场景带来不便。 当领有多个我的项目时,可能开发的模块不须要对外共享,这时就可应用公有模块来代替,让您在多个零碎间应用雷同的账号登录公有模块。 公有模块应用在模块创立或模块批改时,关上公有模块开关,这样公有模块就不会呈现在模块市场中,其他人也不能拜访和查看应用,不便多个外包我的项目之间的复用。 公有模块也须要通过平台审核能力在多个我的项目中下载,快创立一个公有模块试试吧~

February 26, 2022 · 1 min · jiezi