一个比较老的Vue项目,在启动时候,报错: opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ], library: 'digital envelope routines', reason: 'unsupported', code: 'ERR_OSSL_EVP_UNSUPPORTED' 问题原因是nodejs升级到17后,openssl3.0 对允许算法密钥大小增加了严格的限制,临时的解决办法是配置node_options. # Windows 环境 $env:NODE_OPTIONS="--openssl-legacy-provider" #or set NODE_OPTIONS=--openssl-legacy-provider # Linux or Mac export NODE_OPTIONS=--openssl-legacy-provider 上述的方法是一次性的,也可以在package.json中对script进行修改,如 ... "serve" : "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve" ...
PHP代码质量工具之Laravel Pint
作为开发人员,我们有责任尽可能保持代码的最佳状态。这不仅有助于维护和扩展代码,还能避免出现错误。 在 PHP 中,有许多工具可以帮助我们实现高质量和无错误的代码,包括 PHP Mess detector、PHP CodeSniffer、PHPStan 和 Psalm。这些工具都很不错,但要集成到 Laravel 项目中并不容易。 后面我们会介绍五款专门用于帮助你及早捕捉错误、提高 Laravel 代码质量、确保编码风格统一的工具,让你在 Laravel 项目中轻松遵循最佳实践,现在我们先来说说 Laravel Pint。 我们还将介绍文本编辑器集成和使用这些工具的持续集成。 前提条件 本教程假定您已设置好 PHP 开发环境。本教程还假定您有 PHP 和 Laravel 方面的经验。 要充分利用本教程,我强烈建议您跟读本教程,以便亲自了解和测试这些工具是如何工作的。 为此,请克隆以下 repo:food-order-app-laravel-tdd: git clone https://github.com/anchetaWern/food-order-app-laravel-tdd cd food-order-app-laravel-tdd git checkout tdd 接下来,将 .env.example 文件重命名为 .env,并用本地数据库密码更新 DB_PASSWORD。 完成上述操作后,执行以下命令设置项目: composer install npm 安装 php artisan config:cache php artisan migrate php artisan db:seed 这样就能安装所有的 composer 和前端依赖项,更新配置,迁移数据库并为其播种。 我建议你安装 GitHub for desktop 或其他 Git 图形用户界面工具,这样你就能看到这些工具对你的代码做了什么。 什么是静态代码分析? 静态分析允许您在不运行代码的情况下检查代码是否存在问题。它基本上是读取代码、理解代码并将代码与特定规则进行比较,以验证代码的正确性。下面是一个例子:...
magento2中opensearch或mysql作为catalog search engine的区别
在Magento 2中,你可以使用OpenSearch或MySQL作为Catalog Search Engine。这两种搜索引擎在功能上有一些显著的不同: 性能和规模:如果你需要处理大量的数据并且需要更好的性能和扩展性,那么OpenSearch很可能是更好的选择。OpenSearch是一种基于分布式架构的搜索引擎,可以通过增加节点来扩展性能和容量。MySQL作为关系型数据库,性能和容量的扩展受到硬件和软件的限制。 搜索质量:OpenSearch使用先进的全文搜索算法,可以更好地处理模糊查询、拼写错误和语言处理等问题。相比之下,MySQL的搜索算法可能更加基础,但它也可以通过使用全文索引等技术来提高搜索质量。 集成和配置:集成OpenSearch可能需要更多的配置和工作,因为它是一个独立的搜索引擎。相比之下,Magento 2已经默认集成了MySQL,因此使用MySQL作为Catalog Search Engine可能需要更少的配置和工作。 总的来说,如果你需要更好的性能和扩展性,以及更高质量的搜索结果,那么OpenSearch可能是更好的选择。如果你正在寻找一种简单易用的搜索引擎,并且你已经熟悉了MySQL,那么使用MySQL作为Catalog Search Engine可能是更好的选择。
PHP 8.2:动态属性被弃用
在PHP类中,有可能动态地设置和检索未被声明的类属性。这些属性不遵守特定的(类似于类型化的属性),它需要使用__get()和__set()魔法方法来有效地防止或控制动态属性的设置和检索方式。 class User { private int $uid; } $user = new User(); $user->name = 'Foo'; 在上面的片段中,User类没有声明一个名称为name的属性,但由于允许动态属性,PHP允许设置它。 虽然动态属性提供了创建类的灵活性,如没有严格的类声明的价值对象,但它为应用程序中潜在的错误和意外行为提供了可能性。例如,由于PHP默许所有的动态属性,设置属性的语句中的一个错别字可能会被忽略。 在 PHP 8.2 及以后的版本中,为未声明的类属性设置一个值是被废弃的,并且在应用程序执行过程中第一次设置该属性时,会发出废弃通知。 class User { private int $uid; } $user = new User(); $user->name = 'Foo'; Deprecated: Creation of dynamic property User::$name is deprecated in ... on line ... 从类中设置属性也会发出废弃通知: class User { public function __construct() { $this->name = 'test'; } } new User(); Deprecated: Creation of dynamic property User::$name is deprecated in ....
GD库导致Magento2图片处理异常的问题处理
问题描述 部分产品图片无法正常加载,手动resize图片,报错。 bin/magento catalog:images:resize # warning show: # ... imagecreatefrompng(): gd-png: libpng warning: Interlace handling should be turned on when using png_read_image ... 查了一下这个问题,因该是 gd 库的bug 导致的报错,受系统环境制约,升级php版本及相关插件风险比较大,好再 Magento 提供了 GD2(默认) 和 ImageMagic 两种库的选择,可以绕过该问题。 安装配置 imageMagic yum install php-pear php-devel gcc yum install ImageMagick ImageMagick-devel ImageMagick-perl pecl install imagick echo extension=imagick.so >> /etc/php.ini systemctl restart php-fpm.service 修改默认Adapter # show default adapter bin/magento config:show dev/image/default_adapter GD2 # set imagick as default adapter bin/magento config:set dev/image/default_adapter IMAGEMAGICK 然后刷新缓存,重新resize,一切正常。
brew切换php版本不生效的改进方案
mac环境随时随地方便的切换php版本,前提如下: Mac 环境, zsh为默认shell 安装了brew 通过brew 安装了多个版本的php 基本方式 举例,从php.7.4切换到php8.1 brew unlink php7.4 && brew link --overwrite --force php@8.1 到这一步,如果运行 php -v ,那么版本还是7.4 ,因为还需手动更新.zshrc文件中的PATH路径,以确保使用正确的PHP版本。 vim ~/.zshrc #注释掉下面两行 export PATH="/usr/local/opt/php@7.4/bin:$PATH" export PATH="/usr/local/opt/php@7.4/sbin:$PATH" #手动添加如下两行 export PATH="/usr/local/opt/php@8.1/bin:$PATH" export PATH="/usr/local/opt/php@8.1/sbin:$PATH" #保存后运行下面命令之使生效 source ~/.zshrc 改进方式 将上面提到的命令写成bash脚本,一次运行。 #!/bin/zsh if [ "$1" = "7.4" ]; then brew unlink php@8.1 && brew link --overwrite --force php@7.4 sed -i '' '/php@[0-9\.]*\//d' ~/.zshrc echo 'export PATH="/usr/local/opt/php@7.4/bin:$PATH"' >> ~/.zshrc echo 'export PATH="/usr/local/opt/php@7.4/sbin:$PATH"' >> ~/....
php7.4 与 php8差异
PHP 8.0 是 PHP 7.x 系列的下一个主要版本,与 PHP 7.4 相比有一些重大的变化和改进。以下是 PHP 8.0 相对于 PHP 7.4 的一些重要的变化和改进: JIT 编译器:PHP 8.0 引入了一个全新的 JIT 编译器,可以提高代码的执行速度,尤其是在大型应用程序中。 新的语言特性:PHP 8.0 引入了一些新的语言特性,例如命名参数、联合类型、match 表达式等,可以提高代码的可读性和可维护性。 函数和类的改进:PHP 8.0 对一些函数和类进行了改进,例如 str_contains()、str_starts_with()、str_ends_with() 函数,以及 DateTime 类等。 错误处理的改进:PHP 8.0 对错误处理进行了改进,例如引入了新的 Throwable 接口、Union Types 等,可以提高代码的健壮性和可靠性。 移除了一些废弃的特性:PHP 8.0 移除了一些废弃的特性,例如 magic_quotes_gpc、realpath_cache_size 等,可以提高代码的安全性和稳定性。 总的来说,PHP 8.0 相对于 PHP 7.4 有一些重大的变化和改进,尤其是 JIT 编译器和新的语言特性等,可以提高代码的执行速度和可读性。但是,这些变化和改进也可能导致一些不兼容性问题,因此在升级到 PHP 8.0 之前,需要仔细评估其对项目的影响,并进行充分测试。
Javascript Fetch Note
An Example about Fetch fetch('https://api.example.com/data', { method: 'POST', // 请求方法 headers: { 'Content-Type': 'application/json' // 请求头中的 Content-Type }, body: JSON.stringify({ // 请求体中的数据 name: 'John Doe', age: 30 }) }) .then(response => { if (response.ok) { // 判断响应是否成功 return response.json(); // 将响应转换为 JSON 格式 } else { throw new Error('Network response was not ok.'); // 抛出异常 } }) .then(data => { console.log(data); // 处理 JSON 格式的响应数据 }) .catch(error => { console.error('There was a problem with the fetch operation:', error); // 处理异常 }); fetch 默认是异步执行的。当你调用 fetch 函数时,它会立即返回一个 Promise 对象,然后在后台发起网络请求。一旦请求完成,Promise 对象就会被解析为一个 Response 对象,然后你可以使用 then() 方法来获取响应数据。...
以root用户运行php-fpm
在开发环境中,为了避免文件权限带来的问题,可以将php-fpm的运行用户设为root. 但在默认情况下,直接修改php的运行用户为root,重启php-fpm进程后会报错 ERROR: [pool www] please specify user and group other than root [26-Jun-2014 00:39:07] ERROR: FPM initialization failed 通过查看php-fpm的文档得知,如果要以root用户运行,需要加上特定参数 # php-fpm --help ... -R, --allow-to-run-as-root Allow pool to run as root (disabled by default) 如何添加这一参数: 找到 php-fpm.service , 可以使用命令 find / -name php-fpm.service 添加参数 ExecStart=/usr/sbin/php-fpm --nodaemonize -R 重启php-fpm. systemctl restart php-fpm 注意,切勿在正式环境中使用root来运行php-fpm Warning: php-fpm.service changed on disk. Run ‘systemctl daemon-reload’ to reload units. 修改后如有这个警告,执行即可。
magento2中Index Management两种模式的差异
Magento 2的Index Management有两种模式:Update on Save和Update by Schedule。它们的区别如下: Update on Save:这是Magento 2的默认模式。在此模式下,当商品、类别、客户等数据发生更改时,索引会立即更新。这意味着在每次保存数据时都会更新索引,因此可以确保索引始终是最新的。但是,这种模式可能会影响性能,因为每次保存数据时都会触发索引更新。 Update by Schedule:在此模式下,索引更新是按计划进行的。您可以在Magento 2后台的“索引管理”中配置索引更新计划,例如每小时、每天或每周更新一次。这种模式可以减少索引更新对性能的影响,因为索引更新不会在每次保存数据时触发。但是,这种模式可能会导致索引不是最新的,因为在计划更新之前,数据可能已经发生了更改。 因此,选择适当的索引更新模式取决于您的应用程序的需求。如果您需要确保索引始终是最新的,并且可以容忍性能影响,则可以选择Update on Save模式。如果您更关注性能,并且可以容忍索引不是最新的,则可以选择Update by Schedule模式。