macos定期执行php脚本
在CentOS下可以通过shell脚本执行定时任务 在macos下 有类似的功能 使用crontab
crontab的格式:
f1 f2 f3 f4 f5 program
# 分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-6) 程序
# 其中如果要执行 每x分钟 则使用 */x
# 如果使用* 表示任意次数
* * * * * curl https://test.com
# 表示每分钟都会使用curl打开 test.com
在CentOS下可以通过shell脚本执行定时任务 在macos下 有类似的功能 使用crontab
crontab的格式:
f1 f2 f3 f4 f5 program
# 分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-6) 程序
# 其中如果要执行 每x分钟 则使用 */x
# 如果使用* 表示任意次数
* * * * * curl https://test.com
# 表示每分钟都会使用curl打开 test.com
说来有点惭愧用了1年多的git至今还没有创建过分支,主要都是把git当成一个线上同步来用。 细想起来是因为我很难集中精力细看git的说明文档,另一方面很多网上的文章说的比较晦涩抽象,很难简明扼要的吸收要点。 但是git这些强大的功能到底作用是什么? 如何和实际工作联系,怎么样简单快速的get到这些功能的意义和使用方式呢? 今天就好好get一下。
“这个文件夹,被我征用了,我要用它来做我的代码版本控制,其他工作就交给git你了。”
初始化仓库 初始化之后,git就会在这里生根发芽。
“快帮我建一个和sth一样的仓库,放到folder文件夹就行了。(嗯,仓库我还没建,你看着办)”
拉取的时候可以通过 sparse clone 实现对指定文件夹的拉取
这样做通常是为了只下载核心的代码,不希望文件过多过于臃肿。
后来发现另一个更重要的,特别是在一个项目刚开始克隆别人的项目时,使用 --depth 参数来设置拉取深度更有效。
需要注意的是,可能和版本有关 也可能git语法就是这样。 --depth 需要写在 add,clone之后 不能写在语句结尾,否则是无效的。
网上对于挂载磁盘方式很多,有命令行的也有一键挂载的sh
这里做一个比较有条理的总结
查看当前磁盘情况
fdisk -l
# 这时会显示系统所支持的硬盘 每个硬盘有一个盘符 如 /dev/vda
挂载磁盘到对应目录( 相当于为磁盘访问创建一个快捷方式 )
mount /dev/vda /mydisk
# 挂载 盘符名称 快捷方式名称
# 如果挂载错误 可以卸载
umount /dev/vda/ /mydisk
如果过程中需要对盘符进行格式化
mke2fs ext4 /dev/vda
# 格式化 格式 盘符
在无意间漫游网上的文章时,看到一个指出对JavaScript误解的部分提到了这个关于JavaScript私有对象的问题。
在该文章中指出,在对象内部使用 var 创建的变量属于私有变量、这个是外部无法访问的。 在这里var的变量我们换一种说法就是局部变量。事实上不能算是真正的私有属性。
我们知道在面向对象编程中,一个类的属性、方法如果能够被其他类访问调用,那么这个是public 公开属性、方法。 但是他有一个隐式条件就是,他也能被类自身其他的方法访问。类的private 私有属性、方法虽然不能被外部属性访问,但是他是需要满足被同一个父类下的其他方法访问的。
而局部变量是方法内部创建的,他只能在当前方法的生命周期内被调用,如果一个JavaScript对象中包含了多个方法,在方法内部var创建的属性和方法,是不能被其他任何方法、包括同一个类的其他子方法调用。
在想清楚解决方案、做好全部备份、逐个相关文件关系查验之前,尽量不要做任何文件的写入、覆盖操作。
记一段辛酸但好歹不用跳天台的数据库恢复笔记
能写一个自动备份脚本,为什么要偷几十秒的懒呢?
主要也是参考下面链接最终成功恢复。 这篇文章的步骤稍微有点多。有些是恢复不必要的,这里做一下自己的整理。
数据库目录配置错误时,MySQL是不能正常启动的,报错可能与此无关。 比如说,找不到 user_table这样的报错,都可能是目录配置错误。
1、Windows和Linux下均可用改host的方式 Linux的方法为: 先查询github域名的公网地址 结果为: 151.101.72.249 github.global.ssl.fastly.net 192.30.253.112 github.com 将两地址加入到/etc/hosts文本中 重启网络组件: sudo /etc/init.d/networking restart 查看修改的结果: cat /etc/hosts
1-2kbs 到 200-500kbs
在多数现代浏览器中我们都可能会遇到图片跨域被阻止的问题,一般来说跨域问题主要出现在前后端分离,云架构的web系统中。 在两年前的时候通过网上的搜索勉强应付了问题,但是每次使用或多或少还会有需要解决的小问题。这次弄清楚了之后发现之前网上大多数也都是一知半解,并没有解决核心问题,所以导致了瞎试,碰运气的方式来处理。
首先html2canvas跨域问题的原因 我们希望将html渲染为canvas 进而渲染为图像,这就需要将html中的资源加载到临时的canvas中,而这个时候,如果资源和当前页面不同源,就会被canvas认为有污染拒绝加载。这是出于浏览器出于安全的角度做的一个设定。
在这个时候,我们需要做的其实比较简单,在所有因为跨域被拒绝的资源从服务端返回一个header
Access-Control-Allow-Origin: https://aaa.bbb.com
Access-Control-Allow-Methods: POST, GET, PUT, DELETE
诸如网上的一些都是,不需要的:
Access-Control-Expose-Headers:
Access-Control-Allow-Credentials: true
正则表达式的重要性不言而喻,平时写的时候都是拼拼凑凑感觉还是不太好,趁着今天做一个梳理,要让正则的用法深入血液才好。
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
创建一个正则表达式节
你可以使用以下两种方法之一构建一个正则表达式:
使用一个正则表达式字面量,其由包含在斜杠之间的模式组成,如下所示:
var re = /ab+c/;
使用正则表达式字面量为正则表达式提供了脚本加载后的编译。当正则表达式保持不变时,使用此方法可获得更好的性能。
或者调用RegExp对象的构造函数,如下所示:
var re = new RegExp("ab+c");
使用构造函数为正则表达式提供了运行时的编译。使用构造函数的方式,当你知道正则表达式的模式将会改变,或者你不知道模式,并且从其他来源获取它,如用户输入。
最近正在做appsite框架传统网站架构的拓展、其中不免有SEO的部分。 在网上做了一点功课,meta中的 description比较关键,keywords据说已经不再受搜索引擎的关照了,不过这种事情现在不能盲目相信,既然做一个网站那么还是应该要照顾好关键词。但是没必要付出过高的人力成本,所以我这里想到的还是使用分词扩展来自动生成关键词。 这样做的好处是,无论搜索引擎是否在意关键词,我们有和内容相关度很高的关键词,这不会对我们带来损失。 基于程序算法生成的关键词,不需要我们花费人力成本,包括可以在后台控制是否开启该功能。
我这里选用的是对php支持比较好的 SCWS分词扩展。 如果分词的目的是更多的语义化分析、情感分析等,那还是应该考虑一下其他的分词库,不过基本上没有php支持。
进入正题
因为最近的一个需求涉及到SEO 所以考虑用php写一套前台,这样可以根据url自动输出完整的页面,这里比较重要的是url rewrite 因为直接使用参数来访问页面一是不具备结构性,不方便基于文件夹管理php的前台页面,二是搜索引擎搜索方面也不友好。 所以要为后台添加一套自适应的rewrite。
以下是为一个SEO网站设计的结构
domain / home
/page | /class
/action
?querys
其URL示例为: https://domain/user/detail/12345/... https://domain/goods/list/... 经过重写转化为: https://domain/?abstract=user&functionality=detail&id=12345... https://domain/?abstract=goods&functionality=list...
今天和罗什孵化器的石总聊项目,我们提到了为了保证一些数据的真实性,需要引入区块链技术,这样我们可以避免像58同城这样的虚假信息漫布的问题。 我们聊了很多除了区块链以外的机制补充,还是很有成果的,但是对于区块链技术的实际实施,我考虑了一下,还是应该使用内部数据库来解决。
主要原因有:
搭建一个互联平台、提供的服务远远大于分布式记账的需要,我们也不是一个单纯的金融平台、我们有大量的数据并不敏感,而且是需要反复维护的,如果完全基于区块链来构建平台,是一种因噎废食的方式,既浪费空间,也会导致系统的容错率极低。
一个正式的互联网服务平台、需求是多种多样的,我们不能将所有信息全部都放到一个公开的信息链条上、最典型的就是用户的隐私数据,而且也没有这样的必要。如果完全基于区块链构建平台,那么就会导致我们本不需要额外做的隐私问题,需要再投入各种技巧来规避,而且是不能从根本上解决的。 用户隐私泄露、服务器风险增加等问题都不好处理。
下面介绍一下,内区块链的可信度方案以及具体实现方式
引入服务端入口(管理后台接口)
初始化管理后台 Manager对象
引入页面文件
系统用户的默认权限设置
90000 超级管理员 80000 管理员
40000 网站编辑 30000 创作者 10000 普通用户
由于没有数据表的概念、我们很多基于关系型数据库的查询方式、在Redis服务器上就要有新的思路。 譬如说我们通过4张表来维护用户数据、在redis上就应该只使用一个Hash 另外类似于Comment这样的表,我们就需要设计成Redis List类型 以COMMET_USERID来作为key 每一次添加一条反序列化数据进去。但这样做面临的问题是我们无法使用关系型表的其他诸如合并查询、反向查询等查询功能。
配置文件中配置 requirepass yourpassword
目前没有方案 考虑中 这个部分也和java服务端的朋友讨论过,Redis确实没有这方面的支持,如果考虑同一个redis服务器中有多个或者大量Saas需求、那么比较好的方式就是在最前面加一个appid的索引。
探索一下几种实现方式:
# 以saasID作为key userid做其中一项的方式
hset TRFUnmsZ userid qFVqmqMz nickname sprite
hset gdYuSu4G userid hGE5REy2 nickname amber
# 以userid作为key saasid作为其中一项
hset qFVqmqMz saasid TRFUnmsZ nickname sprite
hset Lh8PCIVy saasid TRFUnmsZ nickname soki
hset gdYuSu4G saasid hGE5REy2 nickname amber
# 以saasid拼接 keyid的方式
hset TRFUnmsZ_qFVqmqMz nickname sprite
hset TRFUnmsZ_Lh8PCIVy nickname soki
hset hGE5REy2_gdYuSu4G nickname amber
hset TRFUnmsZ_SETTING WECHATID 123456
hset TRFUnmsZ_SETTING APPNAME AppSite
hset hGE5REy2_SETTING WECHATID 654321
基于Redis只能通过key进行查询、不能使用类似于MySQL的WHERE查询,所以用saasid作为key的方式被摒弃。我们不可能取出所有的saas下的数据 再到程序里查找。
在macOS上安装php-redis是比较简单的,但是也有可能进入坑里,由于百度到的结果更坑,所以整理一下备用
官方下载地址 https://redis.io/download 参考官方的说明、安装步骤是 手动下载或者使用终端wget下载tar包 下载完毕后解压并且打开目录
$ cd /User/sprite/Downloads/redis-5.0.5
$ make
安装完毕之后打开终端输入 redis-server 出现redis欢迎界面表示已经安装成功
使用redis-server启动redis服务之后不要关闭终端页面、测试的时候要另外打开一个终端、然后输入redis-cli 否则会报错 无法连接到redis服务器
大杀器 官方文档 phpredis-Github
参考官方的文档,我们可以采用pecl安装、我没有尝试。 使用编译安装的方式
https://github.com/phpredis/phpredis/releases
下载完毕后解压,建议把包转移到其他地方,防止后面清理下载文件夹清理掉。 比如说 我放到了 /Library/PhpExtra/redis-5.0.2 (可以随便放)
$ cd /Library/PhpExtra/redis-5.0.2/redis-5.0.2
一定要保证目录下有 configure文件
这一步是网上基本都错误的部分 phpize是一个可执行文件,路径一般在/usr/bin/下 如果我们的mac注册了php环境,那么我们直接输入phpize就可以 没有再切换目录的必要。
$ phpize ./configure --with-php-config=/usr/bin/php-config
如果这一步的时候,无法找到phpize我们再使用绝对路径来定位
$ /usr/bin/phpize ./configure --with-php-config=/usr/bin/php-config
可能发生的问题:
1.Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable.Then, rerun this script.
brew install autoconf
2.mac phpize执行后报错:grep: /usr/include/php/main/php.h: No such file or directory
3.make: *** No targets specified and no makefile found.
如果phpize这一步成功了,不报错了。仍然有可能无法安装。比如说我就是这样。
无奈,尝试使用pecl方式安装。
一番折腾。 发现还是搞不定。 最终发现了是自己在2.3的步骤时候有错误。
$ cd /Library/PhpExtra/redis-5.0.2/redis-5.0.2 # 切换到你解压的目录
$ phpize
Configuring for: PHP Api Version: 20160303 Zend Module Api No: 20160303 Zend Extension Api No: 320160303
这一步看不到版本号的,看上面错误参考2
$ ./configure
... configure: creating ./config.status config.status: creating config.h
$ make
... Build complete. Don't forget to run 'make test'.
$ make install
...
Installing shared extensions: /usr/lib/php/extensions/no-debug-non-zts-20160303/
最后一步会告诉你 扩展安装到了哪里,复制下来 去php的配置文件中添加
php.ini一般在 /etc/php.ini 如果你没有就复制一个 php.ini.default出来 最后加上:
extension_dir="/usr/lib/php/extensions/no-debug-non-zts-20160303"
extension=redis.so
保存重启apache
sudo apachectl restart
最近回复