Back

中控指纹考勤机折腾记录

使用 PHP 获取考勤机内的考勤记录

型号:ZKTeco F18/ID
缘由:考勤记录无法自动同步到公司开发的 OA 内,官方的对接又非常的复杂和繁琐,寻求简单的办法实现自动同步考勤数据。

可行性:

使用默认 telnet 账号可登录(可自行搜索)
考勤数据库为 sqlite,位于 /mnt/mtdblock/data/ZKDB.db

方案:

在考勤机上跑 php-cgi,并用简单的 PHP 脚本实现数据拉取。
先在其他机器上通过 crosstool 编译 PHP,crosstool 为 0.43 版本,gcc 应选 4.1

export PATH="/opt/crosstool/gcc-3.4.5-glibc-2.3.6/mipsel-unknown-linux-gnu/bin/:$PATH"
./configure -host=mipsel-unknown-linux-gnu -prefix=/usr/local/php -disable-all -enable-pdo --enable-json -with-sqlite3 -without-iconv "CC=mipsel-unknown-linux-gnu-gcc -EL" "CFLAGS=-EL" "LDFLAGS=-EL"
nano Makefile
EXTRA_LIBS = -lcrypt -lcrypt -lm -lcrypt -lcrypt
EXTRA_LIBS = -lcrypt -lcrypt -lm -lcrypt -lcrypt -ldl

编译好的 php-cgi 放在 /mnt/mtdblock/dev/
PHP 脚本通过 FTP 上传 tcpsvd 0 21 ftpd -w /
修改 PHP 配置文件 vi /usr/local/php/lib/php.ini

cgi.force_redirect=0;
date.timezone='UTC';

修改 httpd 配置文件 vi /etc/httpd.conf

*.php:/mnt/mtdblock/dev/php-cgi

代码放在 /www/
启动httpd:/usr/sbin/httpd -vv -f -h /www/
正式使用时可后台运行:/usr/sbin/httpd -h /www/
开机启动?编辑 /etc/init.d/rcS ,将上面命令放在 telnet 下面

结论

外部服务器通过简单的 PHP 脚本根据时间戳获取,定时获取增量记录。服务简单,已长期稳定运行。(现在想来,直接用 Go 编写是不是更简单?)

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus