标签归档:PHP

慎用json_decode的assoc参数

我们在工作中遇到的情况:

  1. vue 3前端界面 + php 后端 API
  2. vue 3采用typescript
  3. API数据采用json格式

出现的问题

当post api时提交的json数据中包含{}这种空JSON对象,比如style:{}, 后端php在处理过程中会变成[]并返回给前端,导致前端后续的功能出现bug,如这时再往style中设置值就不能正常工作了:style[‘foo’] = ‘bar’, 这时设置是不成功

问题的原因

原因1: typescript的强类型,如果是javascript,这点其实并不影响,JS数组可以直接设置值:var style = []; style[“foo”] = “bar”;这个操作是成功的。
原因2: 后端php在处理的过程中都是按数组格式处理:json_decode($data, true),无形中就把{}变成了php的空数组,然后返回给前端时json_encode就变成[]。

解决办法

修改后端json_decode总是按对象格式处理

Mac 11.0以上版本不能编译PHP的问题

在Mac 11.x版本编译php会提示php.h不存在,phpize也看不出php版本内容:

grep: /usr/include/php/main/php.h: No such file or directory
grep: /usr/include/php/Zend/zend_modules.h: No such file or directory
grep: /usr/include/php/Zend/zend_extensions.h: No such file or directory
Configuring for:
PHP Api Version:        
Zend Module Api No:     
Zend Extension Api No: 

这是因为新版本的mac 不在支持php了,后续可能会移除php, 通过php -v 可以看出

但实际上还没有完全移除PHP,可以查看/Library/Developer/CommandLineTools/SDKs目录下你系统版本对应的目录中usr/include/php里面的内容是否还存在,如果还存在说明php devl的头文件还在哪里,只是usr/bin/phpize找不到他们。

通过phpize的输出也不难看出,他是去usr/include/php里面找对应的头文件,那么我们建立软链接到对应的/Library/Developer/CommandLineTools/SDKs下面的php目录即可。但由于/usr/include目录是Read only的,不允许创建软链接,解决办法就是:

1. 把/usr/bin/phpize 和/usr/bin/php-config两个文件复制到/usr/local/bin,并修改如下两处内容,加上local

php-config中extension_dir也重新指定一个目录,并且把/etc/php.ini extension_dir中也同步调整:

2. 建立软连接 ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/usr/include/php /usr/local/include/php

然后使用phpize时指定全路径 /usr/local/bin/phpize

configure时指定我们修改后的php-config:/usr/local/bin/phpize ./configrue –with-php-config=/usr/local/bin/php-config

make, make install 最后把编译的so文件会拷贝到指定的extension_dir目录中


该问题解决后,可通过pear的方式来安装其他pecl 扩展了

1. 下载pear: https://pear.php.net/go-pear.phar
2. 安装: php go-pear.phar,在出现的页面中分别把1,4两步设置为如下图所示,这其实是让pecl命令在bin目录中
3. 然后就可以通过pecl按照扩展了,比如pecl install zip,会下载源码并编译,同上面的phpize & configure & make & make install

会员卡销售管理系统交付

  1. 该系统的目的是用于记录会员卡的销售情况,用户角色分为4种,每种又分几个等级:
    1. 会员,分为金卡、铂金卡、黑卡
    2. 教师,分初级、中奖、高级、副校长
    3. 行政,初级、中级、高级
    4. 校长
  2. 每种角色下面的会员等级可以自由配置
  3. 分前端和后端,后端只能由校长和行政登录使用,其他等级的用户不能登录后台;前端只给会员和教师登录使用
  4. 每个等级的区别就是消费额度不同,达到对应的消费额度,自动提升会员的等级
  5. 销售额度包含自己的销售额和自己的团队成员的消费额
  6. 成员的意思就是自己推荐来的人就是自己的团队成员,团队只有一级,比如A推荐了B,B推荐了C,那么A的团队里只有B,B的团队里只有C
  7. 消费由后台进行登记,后台行政人员登记用户的消费情况:电话,姓名、推荐人、卡种、金额、订单号;行政人员登记后,需要由校长进行审核,审核通过则登记有效;校长登记的则不用审核
  8. 后台会配置每种会员卡的达标销售额度和提成情况,提成分两种提成配置,一是固定金额,比如销售一张金卡提成100块,一是配置比例,比如销售一张金卡提成销售额度的1%
  9. 消费登记有效后就需要记录推荐人(组长)的成交金额和提成情况
  10. 提成可以提现,提现由校长进行操作,登记提现的信息,提现成功后减少对应人员的能提成金额和记录提现信息