很多站长朋友们都不太清楚phpevel开启,今天小编就来给大家整理phpevel开启,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 为什么$a ="{phpinfo()}"; @eval("var_dump($$a);"); 中phpinfo可以执行 2、 把php程序运行到sae上有什么用 3、 eval与php一句话的关系 4、 为什么要用evel函数,直接用PHP代码不行吗 5、 php中大括号起什么作用?例如{$pre}groupphp。l还有 evelnum ASC 呢,怎么理解?谢谢! 为什么$a ="{phpinfo()}"; @eval("var_dump($$a);"); 中phpinfo可以执行这个不算是特性,当${}一起用并且内部是一个函数的话,内部函数会被执行,php解释器会自动略过无效的${},你可以试试${print_r()}或者自定义一个函数测试,都会正常出现结果!和可变变量和花括号没什么关系,如果你直接{phpinfo()}还是会正常报错
并且,var_dump()在eval运行前就是一个字符串,并不会当做函数去解释,只有当eval()将其当做代码运行之后才会解释,所以并不是返回值不是代码了,而是evel()运行最早,只有eval()运行后var_dump()才是一个php函数,否则他就是一个字符串!
把php程序运行到sae上有什么用首次听说SAE是在丛磊大牛在两年多前的一次小范围讲座中,但是真正开始使用SAE则是在2013年9月。当时自己的个人网站使用的还是传统的虚拟主机服务,运营商的不作为和服务器的频繁抽风导致我的小站几乎无法访问。忍无可忍的我再次想到了SAE。说起来自己也是学计算机的学生,应该沿着IT发展趋势以实际行动拥抱云计算。但是SAE毕竟不是虚拟主机,而是PaaS服务。这里简单写一篇短文,介绍一下自己的用PHP开发网站迁移到SAE的经历过程中总结的一些小经验。
以文章或类文章内容为主的网站,或者说CMS,通常的架构是PHP处理程序+MySQL数据库+前端模板。PHP处理程序对数据库进行读写操作,并将处理后的数据套用前端模板呈现给Web用户。但是这类程序部署或迁移到SAE时会主要遇到两个问题,一是存储空间的域名和程序空间的不同,二是程序空间不可写。这就使得以前直接生成静态页面的程序无法直接使用了,也会使得在程序空间生成缓存数据的程序无法直接使用了。怎么解决这些问题呢?
一、生成静态页面?
由于程序空间不可写,生成静态页面只能将页面创建到KVDB、MemCache(以下简称MC)和Storage中。但是前两者是不能被Web用户直接访问的,而Storage空间的域名和主域名不同,直接将页面跳转到Storage空间无疑对Web用户不太友好。因此,需要结合URL重写功能和PHP程序来完成这一任务。
1、PHP程序+Storage存储
简单来说,就是Web用户访问一个URL,但是该URL并不存在,通过URL重写转移到某个PHP程序,比如show.php吧,然后将URL中的path作为参数传递给show.php。show.php以该path到Storage中找到相应的静态页面,然后加载该文件并显示出来。但是这里用header功能跳转到该页面是没有意义的,URL将又转到Storage空间的域名了。因此,需要使用Storage服务的read方法,将文件读取出来,再在show.php中显示出来。
需要说明的是,Storage的流出是要计费的,而show.php读取后再以HTTP方式在用户的浏览器中显示出来还是需要计费的,个人猜想这样做会造成网站内容部分的双重计费(个人猜测未经证实,请大家指正)。而MySQL、KVDB和MC是按照请求数量计费的。考虑到Storage的流出计费是150云豆/GB,而另外三种中最贵的MySQL的请求计费是150云豆/百万次,因此,当平均每次请求的流量>(1G/100万),即约1.05KB时,使用MySQL就更便宜的了。然而,现在网页的源文件动不动就超过1KB了,所以不一定非得生成静态。同时,生成静态后的网页也不便于更新或更改风格。
2、PHP程序+KVDB或MC
和前面的类似,无非就是将生成的静态页面以值的形式存储在KVDB或MC中。这种存储和Storage相比,计费的方式发生了变化,是按照请求次数计费的。KVDB是50云豆/百万次,MC是25云豆/百万次。但是需要注意的是,MC的存储费用相当昂贵,是200云豆/GB•天,而KVDB、MySQL和Storage的存储费用都是5云豆/GB•天。因此,当网站内容稍微多一点点的时候,使用KVDB要比MC更合适。
MySQL和KVDB的计费相比,MySQL的请求费用是KVDB的3倍。但是使用MySQL不需要生成静态页面,使用KVDB时相当于读取MySQL后生成的静态页面存储在KVDB中,多占用了一份存储空间(别告诉我说准备将数据只存储在KVDB中,真要是SAE的KVDB再瘫痪一次,那网站就麻烦大了)。
因此,我的网站在实现方式上,首页和列表页等频繁访问的页面中通过MySQL查询的结果存储在KVDB中,减少对数据库的查询请求操作。而其他页面不再缓存,直接从数据库中读取,这样做可以更好的更新页面中的访问量等动态信息。如果考虑进行进一步优化,可以统计页面的访问量,将访问量较大的页面存储到KVDB中。反正现在PHP的CPU时间是不计费的,多增加几个条件判断语句也没啥^_^
二、缓存
接下来讨论缓存的问题。网站中经常会有一些数据需要运行时加载而不是直接写到程序代码里,这样可以便于在网站后台直接进行设置而不是每次都修改程序代码文件。典型的,比如网站栏目列表、页面显示的一些配置、网站的一些全局配置等。这些配置虽然存储在MySQL中,但是通常还是生成缓存文件在运行时加载。这里使用KVDB和MC都可以。KVDB每次请求贵但是存储很廉价。MC每次请求便宜一半但是存储则为40倍。具体怎么选择看用户了。这里需要说明的是,既然按照请求次数计费而不是按照流量计费,那么最合适的优化方法是将全站所有页面都通用的数据存储到一个缓存中,这样就极大程度减少了因为请求数量造成的计费。
三、模板
模板文件应该放到什么地方呢?因为程序空间不能写,而KVDB和MC不能直接由用户上传和修改,因此要想通过网站后台方便地修改模板,还是应该将模板文件放到Storage中。我的做法是,将模板文件放到Storage中,需要修改时,在网站后台的编辑器中修改,或者在本地修改后使用Cyberduck上传。否则,每次修改模板都得重新部署代码实在是太麻烦了。
模板直接放到Storage中也不便使用,因为读取Storage要比读取KVDB/MC要慢。特别是模板这种每个页面都会用到的文件,还是应该以缓存的方式使用。我的做法是,将模板文件放在Storage中,然后读取它,将其中的一些模板标记改为相应的PHP代码,存储到KVDB中。
但是,这种嵌入了PHP代码的“编译”后的模板怎样执行呢?KVDB提供的get方法只能得到值,因为这些值不全都是PHP代码,毕竟还有html的标签,不能被evel。所以,需要使用KVDB的wrapper,以include的方式加载它。PHP中的include是可以有返回值的,可以据此判断是否成功地加载了缓存。如果不成功,可以重新生成缓存再加载。如果重新生成还不成功,为了网站的正常运行,可以从Storage中加载模板原文件再进行处理。这样可以保证即使部分服务出现故障时网站依然可以最大程度保持正常访问。
综上,我的网站迁移到SAE后的实现思路就是:
1、频繁访问的页面存入KVDB,不频繁访问的页面只存储在数据库,页面均动态生成,用AppConfig实现伪静态。
2、通用缓存尽可能存储到一个KVDB或MC的键值中。
3、模板源文件放到Storage中,模板标签预处理为PHP代码后缓存到KVDB或MC中
4、通过include加载缓存,并在include返回异常时重新生成缓存并加载,如果重新生成缓存的过程发生异常则不再使用缓存而直接输出。
我的个人网站已迁移到SAE中,除去上次SAE故障导致KVDB出现异常之外,一直稳定运行。欢迎大家围观和留言。由于使用SAE也不过半年,才疏学浅。文中的错误还请大家批评指正。
eval与php一句话的关系evel 函数 可以执行字符串。这个字符串是PHP语法 例如evel(“echo 'hello Smarty'!”);
为什么要用evel函数,直接用PHP代码不行吗eval能解决的事情,直接写PHP代码肯定一样能解决,因为eval() 作用就是把字符串按照
PHP
代码来计算,但是有些场景下有这个解决手段能让你事半功倍,为什么要去绕路呢?
举个栗子我数据库里存储了用户输入的公式,1+1-2*3/2,如果没有eval能想象到要解决这个公式计算得写一大段函数来实现,但现在我们只要
1eval('return 1+1-2*3/2;')
就搞定了,你说用PHP代码行吗?行!但是何苦呢?
php中大括号起什么作用?例如{$pre}groupphp。l还有 evelnum ASC 呢,怎么理解?谢谢!{$pre}代表在字符串中嵌入变量$pre的值
如果$pre='a';则 {$pre}group得到agroup
{$pre}是更加严谨的写法,这里如果不写{}将无法和$pregroup区分开。
levelnum ASC,延续ORDER BY levelnum ASC
整句意思先由gptype的降序DESC排列、再由levelnum的从小到大升序ASC排列
关于phpevel开启的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于phpevel开启 php怎么打开的详细内容...