liujia 发布的文章

取出老年金

星期五,我去我妈家“报到”。老妈一见我,认真细声地问,
“明朝日尔吖得闲?”
我定了定神,心里担忧地应声,“得——闲——吖。做——惹——啊?”
“捞我驷下银行,取出老年金来。”
我松了一口气,以为要被捉稳驷相睇。“做惹突然爱取出老年金来啊?都嘅久不曾动了。”我说话也利落了些。
我妈没答,另一只熟悉嘅声音传了过来。“听讲,和平财政冇钱了,单位有嘅临时工发不出工资来。”
我之前也曾听讲过,说和平财政缺钱,要发债借钱用。但我只是当笑话,因为我看到,和平一如既往地向着美好的方向发展。就拿新历年底前我路过看得到的场景吧:和平河大型钩机清淤;石油新村坡的水泥路面打烂重修;阳明大桥西侧桥底下的公厕升级改造……如果财政没钱,那这些工程的钱谁来付?
“吖咪尔怕存到嘅老年金变冇了?”我笑着问老妈。
老妈笑了笑,细声地说,“我想取出来存定期,利息多滴哩。我识得只人,佢就系简样做嘅。”
我想了想,这有道理。可能政府发的老年金打到个人银行账户后,钱是当作活期存款的。里下钱膨得嘅快,活期存款,一年嘅利息钱也买不到一条猪排骨。

第二天上午,我和老妈来到中山路的邮政银行网点,要取出老年金。我看到厅里来办理业务的人不算多,但老年人占多数,我算是相对后生的。这个银行网点的有两个人工服务窗口。事先考虑到效率问题,所以我特意带了一张信用卡来,打算取个贵宾号来优先服务。我用信用卡在叫号机上刷了一下,但它说“请刷贵宾卡”。怎么了?我心里有些虚,原先在东山路的网点,信用卡是被认为是VIP卡的啊。我不信刚才听到的,又刷了一次,“请刷贵宾卡”,叫号机还是这么说的。这果真是机器,连原因也不说一下的。旁边坐着的吖婆见到我的窘相,站了起来,指着叫号机屏幕的中间位置说,“领号排队咪?点中间就得。”我好尴尬,本以为捂张信用卡就能混只贵宾号来插队。但无奈现在银行务实多了,可能没百万元存款,根本摸不着贵宾的门槛,如支付宝余利宝尊享版(年化收益率3.4%)就要求账户有100万元。我不知道现在社会上是贵宾的人数比以前翻倍了,还是因为钱膨胀得普通人根本追不上。

我领到了普通的号,显示有16个人排在我前边。我看到厅右墙下有两台自助办理业务的机器,其中一台前边站着一个银行工作人员和一个老太人。我走近前。
“尔想办惹?”穿着职业装的姑娘问我。
“存折打印。”我答。
“补登咪?存折放到顶里。”她指了指机器的下边。
我低身看到微微打开仓门的机器,不太相信能将存折放到那个黑色的入口。试了一次,不敢硬塞,又怕机器操作超时。我的手不自禁地哆嗦起来,连存折都翻不到那张空白页。
“我来。”姑娘接过我手中的存折。她熟练地将存折塞到入口,完成了存折补登。
我睇存折里边新打印出来的内容。显示最近一笔入款是12月14日的180.94元“福利”项;账户余额是一万多;最近一次“利息”是约十吊钱。
“如果爱改密码,也可以在里架机操作咪”?趁姑娘还在,我问她。
“做惹爱改密码啊?老人家嘅折不好捞人家改,改了又漏记了,重置密码时老人家签只名都好难嘅。”姑娘用怀疑的眼光睇稳我。
“想取出钱来啊。在顶里可以操作嘅话,我就不使排队到人工窗口了。”我说了目的。
“尔不知密码嘅?”姑娘疑心更重了。
“不知啊。里本折应该系村里统一办到嘅,好多年前嘅了。我不知密码啊。”我解释。
“里种折,初始密码系有规律嘅”。姑娘说。
“啊……规律系惹喔?”我心中大喜。这样就可以省去重置密码的繁琐手续了。
“我不可以话把尔知嘅。尔驷问村里嘅干部。”姑娘口气又直又硬,容不得我再软求。估计她把我当成擅自挪用父母老年金的忤逆子吧。虽然隔着口罩,但我仿佛能看到她那对我鄙夷的表情。

姑娘不肯告诉我存折的初始密码规律,我只好又走到机器前,刷折,准备测试密码。第一次,输入生日组合,“密码错误”;第二次,输入身份证后六位,“密码错误”。机器无情地播报着。“尔不好再试了啊,再试一次就会自动锁定账户了啊。”姑娘在约三米远的地方说。我抬头看到她正在为一个老太人办稳业务。我合上存折,到厅里找到老妈,拉到姑娘面前。“经理,这是我妈。佢今日来,系想取出老年金,但不知密码。”姑娘语气放缓了些,转向我妈,问了一些存折的情况,还核对了身份证,确认了存折、身份证和实人信息相符后,才将密码的规律告诉我妈。虽然姑娘还是不肯告诉我,但我老妈一转脚就如录音机般将内容告诉了我。

拿到密码后,我在自助业务机里点啊点。先是查余额,成功。然后看到屏幕里显示有转账的功能,我就想将钱转到我的银行账户,不取现金了。第一次,提示失败,原因是余额不足。怎么会呢?我第二次操作,减少了几十块,还是因为余额不足失败。因为每次操作都需要刷折的磁条,且那机子的磁条读槽的前半段是有点凸起的,有些阻力,要手上带点劲才能顺利读到磁条内容的。之前两次操作,我可能已经上上下下刷了不止十次了。刷磁失败的次数越多,我的心就越急。又气又急的话,手上加重力气,狠狠地又刷了一次。咔的一声闷响。“尔不晓操作就望稳来。简样刷到,存折都把尔刷疗了。”姑娘领着一个老太人出现在我后边,语气带着点不满意。“把我先帮里只老大人操作。”姑娘说。我只好让出位置来。我看了看存折,存折背面的右下角是有些磕损了。我有点埋怨自己,如果把存折磁条搞坏,就更麻烦了。

等姑娘帮老大人办理好业务后,我重新站回到机器前。我特意观察了机器侧边的磁条读槽。原来与读槽同一个水平面的后边有一张翘了角的贴纸,挡住顺势刷下的存折。如我前边的操作,刷折时如果用力过大、过快,且没及时收住动作,那么存折会磕到贴纸,造成存折损伤。明白后,我顺着磁条读槽缓缓地刷,利落。我先再一次查看屏幕上显示的余额数值,默默记两遍,然后再按着这个余额数值转账,成功。

我想办的业务在自助机里完成了,所以我将之前领到的叫号纸放到大堂的桌头。我本想去向姑娘说声谢谢的,还想再问她几个问题。如,为什么机器里显示的余额会比存折里打印的少一千多元钱?我妈有社保卡也有存折,那以后老年金是打到社保卡还是存折?网点厅里摆放的“协议存款”的年化收益是多少?但看到她很忙,在厅的左右两边走来走去,要问新进来的人办理什么业务,要指导站在机器前一无所措的老太人操作,如具体到要告诉老太人取三百元钱按哪几个键。我等了约十分钟,没找到跟她提问的机会。倒是听到她回答别人的,“……老年金打到乃,爱问热水镇嘅政府,系各镇级发嘅……”

睇冇机会向银行大堂经理提问,我就向门口扬了下手,向正在坐着的老妈示意,爱归屋下了。一出门,
“总共一万多吊钱。里下一只月有百八吊钱。”我向老妈报告。
“钱呢?都存成定期了?”我老妈反应快。
我忍着没笑出声。“钱都转到我账户了。我帮尔管老年金,帮尔理财,利息比存定期还多。每只月我拿两百吊现金把尔,尔不使来银行排队。吖不得啊?”
“得。存折把尔放稳来”。
“里下确定了哇。老年金不会变冇了?”我侧头笑着对老妈讲。
“我也不信啊,但佢齐家话上高钱发完了以后可能就冇得发了,且我前几工驷卫生院买降压药,之前一直有报销嘅,里下冇了,工作人员话全市都冇报销了。”
“简样啊……”我也不知事情之间有什么样的区别或联系。

sh_lao-nian-jin-6.jpg
县财政局

sh_lao-nian-jin-5.jpg
县人社局

sh_lao-nian-jin-7.jpg
平安桥,和平河

sh_lao-nian-jin-3.jpg
门诊票据

链接:

在 CentOS 7 宝塔面板软件环境中安装unixODBC和FreeTDS - 使用php的 odbc_connect 函数 连接 SQL Server 2000

需求:在CentOS7 的宝塔面板软件环境中,已经安装有 nginx + php7.3。需要通过如 $connect = odbc_connect("DRIVER=FreeTDS; Server=192.168.97.65; Port=1433; TDS_Version=7.1; Database=master", 'sa', 'aqtest'); 的php文件连接到 SQL Server 2000

尝试:

  1. 下载 unixODBC-2.3.9 源码文件。再配置、编译和安装。如本例,是将unixODBC安装到/usr/local/unixODBC的路径,所以在配置时,是 ./configure --prefix=/usr/local/unixODBC
  2. 下载 freetds-1.3.4 源码文件。再配置、编译和安装。如本例,是将FreeTDS安装到/usr/local/freetds的路径,在配置时,除了要加上自定义的安装路径,还要加上unixODBC的参数,如 ./configure --with-tdsver=7.4 --prefix=/usr/local/freetds --enable-msdblib --with-unixodbc=/usr/local/unixODBC
  3. 如果宝塔环境中,安装的php版本是7.3.33的,请下载 php-7.3.33 源码文件。解压后,在原宝塔的php配置参数基础上加 '--with-unixODBC=/usr/local/unixODBC' ,如本例,再编译和安装

    [root@localhost php-7.3.31]# './configure'  '--prefix=/www/server/php/73' '--with-config-file-path=/www/server/php/73/etc' '--enable-fpm' '--with-fpm-user=www' '--with-fpm-group=www' '--enable-mysqlnd' '--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--with-iconv-dir' '--with-freetype-dir=/usr/local/freetype' '--with-jpeg-dir' '--with-png-dir' '--with-zlib' '--with-libxml-dir=/usr' '--enable-xml' '--disable-rpath' '--enable-bcmath' '--enable-shmop' '--enable-sysvsem' '--enable-inline-optimization' '--with-curl=/usr/local/curl' '--enable-mbregex' '--enable-mbstring' '--enable-intl' '--enable-ftp' '--with-gd' '--with-openssl=/usr/local/openssl' '--with-mhash' '--enable-pcntl' '--enable-sockets' '--with-xmlrpc' '--enable-soap' '--with-gettext' '--disable-fileinfo' '--enable-opcache' '--with-sodium' '--with-webp' '--with-unixODBC=/usr/local/unixODBC'
  4. 如果顺利,那么新版本的文件会覆盖原宝塔安装的php文件
  5. 新版本的phpinfo信息输出中,应该有unixODBC的信息详情,如:

    ODBC Support => enabled
    ODBC library => unixODBC
    ODBCVER => 0x0380
    ODBC_INCLUDE => -I/usr/local/unixODBC/include
    ODBC_LFLAGS => -L/usr/local/unixODBC/lib
    ODBC_LIBS => -lodbc
  6. php命令行可返回结果,如

    #php -r "var_dump(odbc_connect('DRIVER={freetds};SERVER=192.168.97.115;PORT=1433;DATABASE=master','sa','aqtest'));"
    resource(4) of type (odbc link)
  7. 在web里测试,php使用 odbc_connect 函数 也正常,如:

    [root@localhost local.anqun.org]# curl http://192.168.97.65/5.php
    master 1
    tempdb 2
    model 3
    msdb 4
  8. 测试文件5.php的内容如下(SQLServer 2008 Express):

    <?php
    
    # connect to 192.168.97.115 with a user "sa" and password "aqtest"
    $connect = odbc_connect("DRIVER=freetds;SERVER=192.168.97.115;PORT=1433 DATABASE=master",'sa','aqtest');
    
    # query the users table for all fields
    $query = "select * from sysdatabases";
    
    # perform the query
    $result = odbc_exec($connect, $query);
    
    # fetch the data from the database
    while(odbc_fetch_row($result)) {
    $field1 = odbc_result($result, 1);
    $field2 = odbc_result($result, 2);
    print("$field1 $field2\n");
    }
    
    # close the connection
    odbc_close($connect);
    
    ?>

dn_bt-php-unixodbc-freetds-sqlserver-1.png

参考:

从 magento 1.x 升级到 magento 2.x - Data Migration Tool

需求:从现有的 magento 1.9.3.6 升级到当前的 magento 2.4.3-p1 。仅要商品、客户和订单数据,模块和模板可不要。

尝试:使用 magento 官方提供的 Data Migration Tool 来迁移数据。大概是先安装新版本的magento2,然后安装Data Migration Tool,再按照操作说明来迁移数据。大概可满足需求。

参考:

magento2 - 提交订单最后一步时出错 - Report ID: webapi - 可能是宝塔站点的“防跨站攻击(open_basedir)”问题

现象:magento2站点,测试时发现提交订单最后一步时报错,如:Details are available in Magento log file. Report ID: webapi-61c539eec7d0c 详细的日志如:

[2021-12-24 03:11:39] main.CRITICAL: Report ID: webapi-61c53a6b7b804; Message: Validate class not found from basename 'MagentoFrameworkValidatorEmailAddress' {"exception":"[object] (Exception(code: 0): Report ID: webapi-61c53a6b7b804; Message: Validate class not found from basename 'Magento\Framework\Validator\EmailAddress' at /www/wwwroot/web1/vendor/magento/framework/Webapi/ErrorProcessor.php:208, Zend_Validate_Exception(code: 0): Validate class not found from basename 'Magento\Framework\Validator\EmailAddress' at /www/wwwroot/web1/vendor/magento/zendframework1/library/Zend/Validate.php:244)"} []
[2021-12-24 03:11:42] main.CRITICAL: Report ID: webapi-61c53a6eb6cea; Message: Validate class not found from basename 'MagentoFrameworkValidatorEmailAddress' {"exception":"[object] (Exception(code: 0): Report ID: webapi-61c53a6eb6cea; Message: Validate class not found from basename 'Magento\Framework\Validator\EmailAddress' at /www/wwwroot/web1/vendor/magento/framework/Webapi/ErrorProcessor.php:208, Zend_Validate_Exception(code: 0): Validate class not found from basename 'Magento\Framework\Validator\EmailAddress' at /www/wwwroot/web1/vendor/magento/zendframework1/library/Zend/Validate.php:244)"} []
[2021-12-24 03:11:43] main.ERROR: BraintreeConfiguration::merchantId needs to be set (or accessToken needs to be passed to BraintreeGateway). [] []

尝试:在宝塔面板的站点管理,网站目录的属性中,不勾选 “防跨站攻击(open_basedir)” 的功能。

dn_magento2-bt-open_basedir.png

参考:https://github.com/magento/magento2/issues/12255

当 mysql 服务因内存不足被系统强制退出后,自动再启动

问题:有个VPS,站点在某些时间段可能被爬虫频繁访问导致mysql服务自动退出,隔天就要人工启动mysql服务,恢复站点可访问状态。

尝试:可以写个定时执行的任务,检测mysql服务是否运行,如没有运行,就启动之。

如脚本 /root/mysqlmon.sh 的内容:

#!/bin/bash

# Check if MySQL is running
/sbin/service mysqld status > /dev/null 2>&1

# Restart the MySQL service if it's not running.
if [ $? != 0 ]; then
    echo -e "MySQL Service was down. Restarting now...\n"
    /sbin/service mysqld restart
else
    echo -e "MySQL Service is running already. Nothing to do here.\n"
fi

定时任务内容(每隔15分钟检查服务状态):
*/15 * * * * /root/mysqlmon.sh > /dev/null 2>&1

在centos7中,可查看 /var/log/cron 日志内容,查看任务执行的历史记录。

参考:https://devanswers.co/how-to-auto-restart-a-crashed-mysql-service-with-cron/