【IT168资讯】自从Kotlin获得了Android的官方支持,就备受关注。JetBrains称Kotlin 1.2是其的主要版本,开发人员可以在JVM和JS之间重用代码。该发布声明指出,现在可以编写一次应用程序的业务逻辑,同时重用于前后端和Android移动应用程序,支持多平台项目。目前我们发现IntelliJ IDEA 2017.3已经绑定了Kotlin 1.2,如果是使用Android Studio或更旧版本的IntelliJ IDEA可以获取更新。
JetBrains表示,与Kotlin 1.1相比,Kotlin1.2提供25%的性能提升,在1.2.x更新中,性能将进一步提高。
▲图片来自JetBrains
当然,目前Kotlin正在语言和标准库方面还在做一些改进,例如通过一个更加简洁的语法将多个参数传递给注释。有关Kotlin1.2的更多详细信息可以查看:https://blog.jetbrains.com/kotlin/2017/11/kotlin-1-2-released/
PHP 7.2发新
作为PHP 7系列的第二个特性更新,PHP 7.2.0不负众望带有许多改进和功能。大家可以在下面这个地址下载源码:http://php.net/releases/7_2_0.php
根据发行说明,主要改进和新功能包括转换对象/数组转换中的数字键,对象类型提示,计数不可数对象以及将HasContext作为对象。
PHP 7.2也将TLS常量改进为理智的值。Mycrypt扩展已被删除,添加了新的sodium extension 。
百度网盘限速大家都懂没有会员的痛,手机拍的照片太多,又想随时方便归档浏览,今天小壹教大家树莓派搭建私有云盘,让你方便管理文件照片。
效果:
环境准备
树莓派 4B+4G系统:Raspberry Pi OS (32-bit) with desktop网盘软件:NextCloud18.0.4
LAMP环境搭建
1.环境搭建
APACHE: Apache/2.4.25 (Raspbian)
MYSQL: Ver 15.1 Distrib 10.3.22-MariaDB
PHP:PHP 7.3.14
安装
sudo apt-get install php7.3-gd php7.3-json php7.3-mysql php7.3-curl php7.3-mbstring
sudo apt-get install php7.3-intl php-mcrypt php-imagick php7.3-xml php7.3-zip php7.3-bcmath php7.3-gmp
sudo apt-get install apache2 mariadb-server libapache2-mod-php7.3
2.数据库设置
登录数据库,新建nextcloud数据库
mysql -u 用户名 -p
Enter Password: [输入你的密码]
create database nextcloud;
exit;
软件安装
1.NextCloud 下载
下载链接:
https://download.nextcloud.com/server/releases/nextcloud-18.0.4.zip
你可以本地下载好,再通过工具上传到树莓派
使用多线程下载器 axel 下载
sudo apt-get install axel
axel -n 20 https://download.nextcloud.com/server/releases/nextcloud-18.0.4.zip
解压程序到 apache网站目录下 /var/www
sudo unzip nextcloud-18.0.4.zip
sudo mv nextcloud /var/www
设置权限
sudo chmod -R 777 /var/www/nextcloud
硬盘挂载
挂载NTFS 格式的硬盘(读写方式挂载)
将硬盘sda9挂载到/mnt/cloud下
查看
sudo fdisk -l
新建文件夹
sudo mkdir /mnt/cloud
挂载
sudo mount -t ntfs-3g /dev/sda9 /mnt/cloud
其他命令
取消挂载
sudo umount /mnt/cloud
查看挂载状态
df -h
开机自动挂载
sudo nano /etc/fstab
最后一行添加
/dev/sda9 /home/pi/toshiba ntfs-3g defaults,noexec,umask=0000 0 0
nextcloud 配置
打开浏览器:输入 http://树莓派地址/nextcloud
配置初始信息,安装完成即可
ps: 数据目录填挂载后的目录 /mnt/cloud
踩坑记录
1.挂载硬盘出现问题
原因是 ntfs 权限
解决:
'check_data_directory_permissions'=>false,
2.服务器内部错误
解决:.进入数据库,选择数据库,清空 cache表
完成!
要建立一个公司网站,虽然说可以下载网站模板来建站,但是很多小白用户对网站模板的后台不是很了解,主要是后台源码,目前网站模板的后台源码有:php、asp、asp.net、java等,目前国内这几个是主流的后台源码,但是使用的比较多的还是php和asp类型的,那对于建一个公司网站来说,是要下载php源码类的模板好还是asp类源码好呢?
技术性的分析就不一一介绍了。
下面海站格根据多年的模板建站经验按照下面3个基本要素给大家分析下php源码和asp源码区别?
一:运行速度
ASP:ASP是建立在COM体系结构之上的。当用VBScript写ASP脚本时,实际上实在使用COM的对象,当向用户浏览器发送信息时,它用的是Response对象的write方法,当它访问数据库和文件系统的时候,它用的是其他的COM对象。这些COM对象的使用使运行速度下降。
PHP:在PHP代码中,所有的工作都运行在PHP的内存空间中,也就是说PHP不是基于COM对象的,所以的他的运行速度会快一些;
所以哪个运行速度要快一些,相信大家肯定会选择php!
php源码二:对主机要求
ASP由于其语言结构,所以asp的网站模板对ASP主机的服务器资源比PHP主机的服务器占用更高;
但是相同配置的php环境的稳定性更好,对内存消耗更少速度更快,而且asp主机的价格也是高于php主机的,所以从对主机要求可以认为php主机更加的稳定价格也更低!
三:网站维护
Asp语言网站目前占有的市场已经不能和php网站相提并论,由于网站优化的要求,php语言所搭建的网站基本上都能符合网站优化要求,并且由于php主机可以伪静态化网站,即使有动态网站路径产生,也可以伪静态化,而对于asp网站这些是做不到的。
并且由于php系统的网站大多数是开源的系统,具有很多函数库,资源丰富,并且后期的网站迁移,数据库同步,在线压缩等对于相同大小的网站php系统的网站所需时间更少。而asp文件所需时间更长。
从上面基本的3个方面分析,相信大家对于建一个公司网站来说选择哪种语言的模板有更清楚的放向吧!
目前建立一个网站大多数用的还是php源码的网站比较多,因为php所要求的网站搭建环境是php+mysql,而这类环境的主机相当多,而符合asp网站所需的环境ASP+access的主机已经不多,即使有价格也是比php的高。
所以很容易得出一个答案:建立公司网站用php源码的网站模板比较好!
1.使用PHP操作FTP-用法<?php // 联接FTP服务器 $conn = ftp_connect(ftp.server.com); // 使用username和password登录 ftp_login($conn, “john”, “doe”); // 获取远端系统类型 ftp_systype($conn); // 列示文件 $filelist = ftp_nlist($conn, “.”); // 下载文件 ftp_get($conn, “data.zip”, “data.zip”, FTP_BINARY); // 关闭联接 ftp_quit($conn); //初结化一个FTP联接,PHP提供了ftp_connect()这个函数,它使用主机名称和端口作为参数。在上面的例子里,主机名字为 “ftp.server.com”;如果端口没指定,PHP将会使用“21”作为缺省端口来建立联接。 //联接成功后ftp_connect()传回一个handle句柄;这个handle将被以后使用的FTP函数使用。 $conn = ftp_connect(ftp.server.com); //一旦建立联接,使用ftp_login()发送一个用户名称和用户密码。你可以看到,这个函数ftp_login()使用了 ftp_connect()函数传来的handle,以确定用户名和密码能被提交到正确的服务器。 ftp_login($conn, “john”, “doe”); // close connection ftp_quit($conn); //登录了FTP服务器,PHP提供了一些函数,它们能获取一些关于系统和文件以及目录的信息。 ftp_pwd() //获取当前所在的目录 $here = ftp_pwd($conn); //获取服务器端系统信息ftp_systype() $server_os = ftp_systype($conn); //被动模式(PASV)的开关,打开或关闭PASV(1表示开) ftp_pasv($conn, 1); //进入目录中用ftp_chdir()函数,它接受一个目录名作为参数。 ftp_chdir($conn, “public_html”); //回到所在的目录父目录用ftp_cdup()实现 ftp_cdup($conn); //建立或移动一个目录,这要使用ftp_mkdir()和ftp_rmdir()函数;注意:ftp_mkdir()建立成功的话,就会返回新建立的目录名。 ftp_mkdir($conn, “test”); ftp_rmdir($conn, “test”); //上传文件,ftp_put()函数能很好的胜任,它需要你指定一个本地文件名,上传后的文件名以及传输的类型。比方说:如果你想上传 “abc.txt”这个文件,上传后命名为“xyz.txt”,命令应该是这样: ftp_put($conn, “xyz.txt”, “abc.txt”, FTP_ASCII); //下载文件:PHP所提供的函数是ftp_get(),它也需要一个服务器上文件名,下载后的文件名,以及传输类型作为参数,例如:服务器端文件为his.zip,你想下载至本地机,并命名为hers.zip,命令如下: ftp_get($conn, “hers.zip”, “his.zip”, FTP_BINARY); //PHP提供两种方法:一种是简单列示文件名和目录,另一种就是详细的列示文件的大小,权限,创立时间等信息。 //第一种使用ftp_nlist()函数,第二种用ftp_rawlist().两种函数都需要一个目录名做为参数,都返回目录列做为一个数组,数组的每一个元素相当于列表的一行。 $filelist = ftp_nlist($conn, “.”); //函数ftp_size(),它返回你所指定的文件的大小,使用BITES作为单位。要指出的是,如果它返回的是 “-1”的话,意味着这是一个目录 $filelist = ftp_size($conn, “data.zip”); ?> 2. FTP上传类 (ftp.php)<?php /******************************************** * MODULE:FTP类 *******************************************/ class ftp { public $off; // 返回操作状态(成功/失败) public $conn_id; // FTP连接 /** * 方法:FTP连接 * @FTP_HOST -- FTP主机 * @FTP_PORT -- 端口 * @FTP_USER -- 用户名 * @FTP_PASS -- 密码 */ function __construct($FTP_HOST,$FTP_PORT,$FTP_USER,$FTP_PASS) { $this->conn_id = @ftp_connect($FTP_HOST,$FTP_PORT) or die("FTP服务器连接失败"); @ftp_login($this->conn_id,$FTP_USER,$FTP_PASS) or die("FTP服务器登陆失败"); @ftp_pasv($this->conn_id,1); // 打开被动模拟 } /** * 方法:上传文件 * @path -- 本地路径 * @newpath -- 上传路径 * @type -- 若目标目录不存在则新建 */ function up_file($path,$newpath,$type=true) { if($type) $this->dir_mkdirs($newpath); $this->off = @ftp_put($this->conn_id,$newpath,$path,FTP_BINARY); if(!$this->off) echo "文件上传失败,请检查权限及路径是否正确!"; } /** * 方法:移动文件 * @path -- 原路径 * @newpath -- 新路径 * @type -- 若目标目录不存在则新建 */ function move_file($path,$newpath,$type=true) { if($type) $this->dir_mkdirs($newpath); $this->off = @ftp_rename($this->conn_id,$path,$newpath); if(!$this->off) echo "文件移动失败,请检查权限及原路径是否正确!"; } /** * 方法:复制文件 * 说明:由于FTP无复制命令,本方法变通操作为:下载后再上传到新的路径 * @path -- 原路径 * @newpath -- 新路径 * @type -- 若目标目录不存在则新建 */ function copy_file($path,$newpath,$type=true) { $downpath = "c:/tmp.dat"; $this->off = @ftp_get($this->conn_id,$downpath,$path,FTP_BINARY);// 下载 if(!$this->off) echo "文件复制失败,请检查权限及原路径是否正确!"; $this->up_file($downpath,$newpath,$type); } /** * 方法:删除文件 * @path -- 路径 */ function del_file($path) { $this->off = @ftp_delete($this->conn_id,$path); if(!$this->off) echo "文件删除失败,请检查权限及路径是否正确!"; } /** * 方法:生成目录 * @path -- 路径 */ function dir_mkdirs($path) { $path_arr = explode('/',$path); // 取目录数组 $file_name = array_pop($path_arr); // 弹出文件名 $path_p = count($path_arr); // 取层数 foreach($path_arr as $val) // 创建目录 { if(@ftp_chdir($this->conn_id,$val) == FALSE) { $tmp = @ftp_mkdir($this->conn_id,$val); if($tmp == FALSE) { echo "目录创建失败,请检查权限及路径是否正确!"; exit; } @ftp_chdir($this->conn_id,$val); } } for($i=1;$i<=$path_p;$i++) // 回退到根 { @ftp_cdup($this->conn_id); } } /** * 方法:关闭FTP连接 */ function close() { @ftp_close($this->conn_id); } } // class class_ftp end /************************************** 测试 *********************************** $ftp = new ftp('222.13.67.42',21,'hlj','123456'); // 打开FTP连接 $ftp->up_file('aa.wav','test/13548957217/bb.wav'); // 上传文件 //$ftp->move_file('aaa/aaa.php','aaa.php'); // 移动文件 //$ftp->copy_file('aaa.php','aaa/aaa.php'); // 复制文件 //$ftp->del_file('aaa.php'); // 删除文件 $ftp->close(); // 关闭FTP连接 //******************************************************************************/ 3. PHP用FTP函数创建目录<?php // create directory through FTP connection function FtpMkdir($path, $newDir) { $server='ftp.yourserver.com'; // ftp server $connection = ftp_connect($server); // connection // login to ftp server $user = "me"; $pass = "password"; $result = ftp_login($connection, $user, $pass); // check if connection was made if ((!$connection) || (!$result)) { return false; exit(); } else { ftp_chdir($connection, $path); // go to destination dir if(ftp_mkdir($connection,$newDir)) { // create directory return $newDir; } else { return false; } ftp_close($conn_id); // close connection } } ?>
1月19日消息 作为全球最流行的编程语言之一,PHP语言目前服务于全球超过81.7%的网站,今日,PHP 7的更新版PHP 7.1.1和7.0.15已正式发布,有需要的IT之家网友可以在此下载。IT之家
PHP 7.1 (7.1.1)
下载源代码[26.15MB]
VC14 x86 Non Thread Safe (2017-Jan-18 21:06:18)
Zip[21.25MB]
sha1: 0617423638b708c0bc2187b82d5d02757a5bbc80
Debug Pack[20.65MB]
sha1: a26857db59b3fea82a1b693d0ea2162eb309cbfb
VC14 x86 Thread Safe (2017-Jan-18 21:06:49)
Zip[21.29MB]
sha1: 5f80a93f4fcdc3caa2faae182e39a0b69be3397f
Debug Pack[20.68MB]
sha1: 7ae69a1608a732282f2bd833983327d49449f3d2
VC14 x64 Non Thread Safe (2017-Jan-18 21:06:20)
Zip[23.21MB]
sha1: aede63d1123d3a586fad1b669a0e52cc8bba5e4b
Debug Pack[20.76MB]
sha1: 4c7f5191b88edfeb98b67ea413deca8c14be2b68
VC14 x64 Thread Safe (2017-Jan-18 21:06:35)
Zip[23.28MB]
sha1: 84aefb5b1f4148a1895e8ae88726279a57850629
Debug Pack[20.74MB]
sha1: b0111a94fb646bcef1f149bbfa3e8e735895d7f6
PHP 7.0 (7.0.15)
下载源代码[25.5MB]
VC14 x86 Non Thread Safe (2017-Jan-18 00:32:27)
Zip[21.11MB]
sha1: 59f936916e365f70fbeb9c106db1355cee9c0e14
Debug Pack[20.12MB]
sha1: 3ae9b4a2ac20be8f58db638e61ca9f1ece07ef75
VC14 x86 Thread Safe (2017-Jan-18 00:32:27)
Zip[21.17MB]
sha1: 120b7f2bbd153c7bafccf3381f63f8190bdea992
Debug Pack[20.22MB]
sha1: 28a7d49556b92bef809e58dcb076c6b2270051de
VC14 x64 Non Thread Safe (2017-Jan-18 00:32:26)
Zip[23.05MB]
sha1: 320d247d5087f5129082a47215578b9b047ae959
Debug Pack[20.22MB]
sha1: 162e1b0669ea3989b89986169456963cfdf7097e
VC14 x64 Thread Safe (2017-Jan-18 00:32:28)
Zip[23.14MB]
sha1: d49f5fb61edba9a7d53d469f11d7ec13f1207d86
Debug Pack[20.26MB]
sha1: 36d12a89b90accedfcbf24ca3b528ba7c2d64a6c
最近在网上经常看到有人在搜php开源网校源码,有免费的可以下载么?也难怪,毕竟现在是个网校盛行的时代,而你想要做网校,那么就少不了php开源网校源码,今天大黄蜂云课堂就来给大家说说php开源网校源码相关分享。
一.php开源网校源码
其实关于php开源网校源码这方面,如果你是想找免费的,我觉得大可不必再找了,因为天上是不会掉馅饼的,你觉得真的有哪个程序猿无聊到做个php开源网校源码丢到网上?然后分文不取么?人总要吃饭的,没有任何利益是不会有人做的,那些所谓的php开源网校源码免费下载,其实就是商家的一点营销套路而已,把一些阉割版(大部分功能都用不了)的php开源网校源码丢上网上,用来吸引人,当你下载了,想用的时候却会发现很多功能都用不了,只能用一些最基础的功能,想要用也可以,直接找他们商家交钱买个正版的,完全是不存在免费这个说法的。就算是有,给你找到了,你以为不会有病毒?你敢用?就像我上面说的无利可图,谁会费时费力去做事,你要知道一个php开源网校源码,市场上的价格可是几万块不等。
二.php开源网校源码的价格
php开源网校源码的价格是多少?其实每家的php开源网校源码的价格都是不一样的,最低的一万多的也有,最高的几十万也有,主要看功能,如果你只是要最基础的教学功能,那么可能价格很便宜,一切的费用基于你的需求。如果你是小企业小公司,那么其实是不建议你直接购买php开源网校源码的,你可以选择租用网校系统,按年收费,一年只需要几千块钱,而且还有团队专门帮你维护,你只需要专心教学就可以,如果你是卖的网校源码,那么费钱不说,而且因为是买断的,基本是不会有团队帮你维护的,你还需要请几个人维护,成本方面还是比较高的。
以上就是大黄蜂云课堂对于php开源网校源码的一些相关看法,希望以上的观点对大家有帮助。最后再提醒大家一句,切莫贪小便宜,要记住无利可图的事情是绝对不会有人做的,如果真的有人做了,那么肯定存在着猫腻。
引言
在程序内下载资源文件,这本身就是一个充满了不确定因素的事情。可能会因为网络超时连接中断,或者程序故障抛出各种异常,在实际中我们一般要避免在程序流程中下载文件。
如果是实在无法避免,用什么办法比较高效呢?或者说比较轻量级呢?本文就来说一说。
学习时间
最直接的办法就是使用内置函数 file_get_contents。参数形式如下:
int file_put_contents( string $filename, mixed $data[, int $flags = 0[, resource $context]] )
这个函数设计的很巧妙,兼容了很多场景下的使用。我们只需要按照相应的参数填入,就可以组装出各种各样的功能。
如果是下载资源,那么会分为两步。第一,把远程资源拿到本地。第二,把该资源写入本地文件。使用代码实现如下:
file_put_contents("Tmpfile.zip", fopen("http://someurl/file.zip", 'r'));
其中在位置参数 $data 的位置,传入了一个fopen生成的文件句柄。
根据函数手册上所说,如果$data 指定的是流,则该流的缓冲区将被复制到指定的文件。对标的函数是 stream_copy_to_stream。那样写起来就得是这样的:
是不是没有file_put_contents精简。难怪很多敲代码的老司机,习惯于使用这一个函数进行网络请求呢!
文件操作
纯粹使用文件操作,也没有问题,使用PHP提供的 fopen fclose fwrite fread 等函数,完全可以胜任。我们将其封装为一个助手函数:
因为不能确定原始文件的长度,在读写的时候,需要注意缓存区的大小,分块读入和写入。其中参数 1024 * 8,指定每次读写 8K 字节。使用 feof 判断文件是否到尾部。
网络请求
既然是网络资源文件,使用上面的函数,无非都要发起 HTTP 请求。既然是网络请求,何不把这个功能交给 cURL 呢?这样对于请求头,请求体,响应体等等全程 HTTP 环节,都可以在程序内操作,容错性肯定不差。
下面我们使用 cURL 库进行文件请求操作:
如果是小小的资源文件,下载起来不费时间,也不会阻碍接下来的流程。如果是超大文件,费时间,而且还可能中断,有没有断点续传?有没有自动压缩?这都是问题。
所以,使用网络请求下载大文件,这已经超出了 PHP 内置函数的范畴。我们需要功能更为强大的下载器,多资源,多线程,断线续传,自动重试。
写在最后
本文通过3中方法对比了实现小文件下载的功能,各有优劣,根据不同的场景需要开发者做出适当的选择。
Happy coding :_)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。
forceDownload("robots.txt");
function forceDownload($filename) {
if (false == file_exists($filename)) {
return false;
}
// http headers
header('Content-Type: application-x/force-download');
header('Content-Disposition: attachment; filename="' . basename($filename) .'"');
header('Content-length: ' . filesize($filename));
// for IE6
if (false === strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6')) {
header('Cache-Control: no-cache, must-revalidate');
}
header('Pragma: no-cache');
// read file content and output
return readfile($filename);;
}
浪漫七夕 为爱绽放 表白神器为你助力!程序男也可以很浪漫!
今天站主把这款程序分享出来,如果你需要,可以拿去使用。程序中图片和文字都可进行替换编辑,还自带背景音乐(谷歌浏览器无法放出音乐)
程序运行原理:给页面文字添加span标签,设置id="text-xx"唯一属性,使用contenteditable="true",开启该元素的编辑模式,用jQuery属性.click()判断点击,用.text()返回此元素的文本内容,并用正则进行判断内容是否合法,然后通过AJAX POST给php处理,php对传入的参数进行过滤,然后读取模版文件,替换模版文件对应内容,保存为新文件并记录操作,最后返回数据给前端,前端处理数据并更新页面。
使用说明:上传解压后的文件夹love到网站根目录,通过 http://你的域名/love/ 进行访问
第一节 上传设置
客户端设置
form:method=post、enctype="multipart/form-data"
input:type=file
<form action="upload.php" method="post" enctype = "multipart/form-data"><input type="file" name="fname"> <!--MAX_FILE_SIZE有兼容问题--> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> <button type="submit">提交</button></form>
服务端设置
在php.ini中进行设置:
默认uploadmaxfilesize = 2M,如果你想上传超过8M的文件,比如:20M,你在设定uploadmaxfilesize = 20M的同时,还要修改postmaxsize选项(默认为8M)。否则post数据超出限制,$_FILES将会为空(报错)。
$_FILES数组
$_FILES超全局数组中,包含着从客户端提交文件的全部信息:
array (size=1)'fname' => //上传文件表单项的name array (size=5) 'name' => string 'home.html' (length=21) //上传文件的名称 'type' => string 'text/html' (length=9) //文件类型(常见文件都可以上传) 'tmp_name' => string 'C:\wamp\tmp\php57A2.tmp' (length=23) //上传文件的临时文件名 'error' => int 0 //上传文件遇到的错误号 'size' => int 28131 //上传文件的大小
上传步骤
var_dump($_FILES);$file=$_FILES["fname"];
获取$_FILES文件 临时文件
$tmp_file=$file["tmp_name"];
获取后缀名
$ext=pathinfo($file["name"],PATHINFO_EXTENSION);//后缀名
创建新文件名
$new_file="file".rand(1,1000000).".".$ext;
保存路径
$path="./files";
格式化路径
$path=rtrim($path,'/')."/";
拼接上传目录
$new_file=$path.$new_file;
临时文件转换成正式文件
move_uploaded_file($tmp_file,$new_file);
PHP第二节 下载设置
浏览器对于可识别的文件格式(html、txt、png、jpg等),默认是直接打开的,对于无法识别的文件,才作为附件来下载。为了可以让可识别的文件也直接可以下载,需要进行如下设置:
<a title="点击下载" href="down.php?name=01.jpg&type=image/jpeg"><img src="01.jpg"></a>
1. 读取文件
$fliename=$_GET["name"];$filetype=$_GET["type"];
2. 文件的描述信息 Content-Disposition(内容配置)指定为attachment(附件)(必须)
header("Content-Disposition:attachment;filename={$filename}");
3. 指定被下载文件的类型(非必须)
header("Content-Type:{$filetype}");
4. 指定被下载文件大小(非必须)
header("Content-Length:".filesize($filename));
5. 将内容读入内存缓冲区
readfile($filename);
注意:在 readfile($filename) 之前,不能有任何输出语句(错误信息、var_dump调试语句,echo输出等),否则下载的文件会出错。
PHP-文件处理系统「程序员培养之路第三十七天」
PHP-错误日志处理「程序员培养之路第三十六天」
PHP-日期时间操作函数「程序员培养之路第三十五天」