亚洲城娱乐php禁止直接访问的问题

( 亚洲城娱乐 )

我有两个文件,a文件被b文件加载,我使用了在b文件定义常量,然后在a文件中验证是否有这个常量,但是验证却失效了。
代码如下:
a文件:

<?php
if !definedHEIDOMAIN {
    exit"123";
}

b文件:

<?php defineHEIDOMAIN, True; require /Include/MakeUser.php; ?> <!DOCTYPE html>
求助如何解决?

a.php

php<?php
if !definedHEIDOMAIN {
    exit"123";
}

加引号, 否则就是检测 True 的这个值是否定义了.

参考:
http://php.net/manual/en/function.defined.php

要在a文件中require一下b文件才行

(看完/读完)这篇文章有何感想! 亚洲城娱乐的分享…

www.yzc261.com变量 $_SERVER、$_ENV 和 define 定义系统参数的疑惑

( www.yzc261.com )

看了一些框架,很多在系统核心入口处通过 define 定义很多系统参数,但是最近看到一些是定义在 $_SERVER 中,甚至还有定义在 $_ENV 中的。

虽然都能实现功能,但是一直很疑惑,这样定义有什么优点吗?还是说可以略微提升性能?求解答~

在.htaccess中加入下面代码

SetEnv database_name your_database
SetEnv mysql_user your_username
SetEnv mysql_password your_password

这时你可以在php中使用$_SERVER[database_name],$_SERVER[mysql_user],$_SERVER[mysql_password]来访问这些值。

说白了就是$_SERVER这个全局数组可以通过apache来新增一些键值;而常量不行,只能在php文件里用define定义。

很少看到直接把变量放在$_SERVER,$_ENV里面的 ,因为这两个变量都是语义化的变量。
另外常量本身就有很高的性能,所以这里应该不是基于性能考虑,也许仅仅是一种不好的个人爱好。

(看完/读完)这篇文章有何感想! www.yzc261.com的分享…

yzc261亚洲城官网备用地址php页面在同一浏览器打开不并发执行

( yzc261亚洲城官网备用地址 )

遇到一个很奇葩的现象,test.php:(访问后隔10s打印时间)

<?php
sleep10;
echo dateY-m-d H:i:s, time;

同一个浏览器打开2个标签页,同时访问apache上的这个页面,为什么第2个页面永远会比第一个页面晚10s钟,在不同浏览器里同时打开就几乎同时输出。

难道是php处理同一浏览器的2个相同请求,不并发而是先后执行,这是为什么呢?

把apache换成nginx也是如此,这是php本来的特性还是哪设置的问题?

假设你只开启了1个PHP-FPM工作进程,PHP-FPM执行sleep10时会睡眠10秒,后面的请求必须等待10秒后才能被处理,不管是不同的标签页还是不同的浏览器。而且sleep调用比较特殊,就算浏览器按Esc中断请求,PHP-FPM也不会停止sleep。

不能同时返回应该是浏览器的机制,而不是PHP的问题,对同一个资源发出请求,如果第一个请求未响应,浏览器应该就不会发出第二个请求。如果第一个请求能及时响应,第二个请求也就能及时发出,比如同时访问下面的脚本,两个请求几乎是同时返回的,其中flush能及时响应,即使处理没有完成。

<?php
ob_start;
echo dateH:i:s.<br />;
echo str_repeat , 1024*4;
ob_flush;
flush;
ob_end_flush;
sleep10;
echo dateH:i:s;

有可能是浏览器限制。某些浏览器是单线程。

@by快乐家园 所说的浏览器限制正对我的电脑 — 也是chrome。
换做双开控制台,然后用两个curl去访问,结果就是几乎同时返回。

为什么会有浏览器限制呢,chrome应该是多进程的呀?
— 初步猜测是因为cookie的问题,因为刚刚清掉所有cookie后,然后再访问就是同时返回了
为什么cookie会导致无法并行呢?
— 检查下php的配置,发现session.auto_start = 1,修改为0,重启下服务器,再访问就同时返回了;
— session会有锁,正是这个锁导致第一个请求结束后,第二个请求才真正开始。

原因可能有多方面,LZ可以检查下session.auto_start

(看完/读完)这篇文章有何感想! yzc261亚洲城官网备用地址的分享…

www.yzc261.com怎么成为PHP官方的开发者,或者PECL的开发者?

( www.yzc261.com )

有知道吗?哈哈,感觉这样自己就牛了啊

除了像mcfog说的那样,提issue,提patch,还可以开发优质PECL扩展,并尝试提交PECL扩展到pecl.php.net.像PHP7中跟鸟哥并肩作战的另一个核心开发者Dmitry Stogov@列宁格勒在PHP4时代就开发了加速器Turck MMCache来提升PHP性能,现在领导ZendOpcache和Zend-JIT项目开发.鸟哥也是一步一步走来的,开发了Yaf/Yar/Yac/Taint等扩展,同时也是APC/Opcache/Msgpack扩展的维护者.

PHP Swoole作者写的教程 构建PHP扩展:
http://wiki.swoole.com/wiki/page/238.html 视频教程
http://php.net/manual/zh/internals2.buildsys.php
php-src/ext/ext_skel脚本用于生成PECL扩展源码骨架.

http://www.laruence.com/2011/09/13/2139.html
入门: http://www.walu.cc/phpbook/
案例: php-src/ext
PECL开发邮件组: http://news.php.net/php.pecl.dev
尽量编写一些phpt测试用例,php-src/tests下有很多参考.
测试时用–enable-debug编译PHP,要做到执行你的扩展逻辑,不输出任何错误信息.用valgrind检测内存泄露.

像PHP代码加密扩展php-beast和类似Yac的PHP进程内的K/V缓存扩展pcache代码量很少,你可以参考一下:
https://github.com/liexusong

从提交issue,参与讨论做起
慢慢提交一些patch
慢慢patch的数量和质量上去了,发言有价值了,自然就有机会了

首先你要回c语言,能写扩展甚至是直接对源码贡献自己的代码。

成为PHP官方开发者不像考试,你考上了就能当,成为PHP开发者主要是你的能力收到官方的认可,或者做出的贡献受到官方的认可,并不是相当就能当的。

中国不仅仅是鸟哥,最少还有swoole的开发者韩天峰都是有php.net邮箱的,但他们都不是单纯的php开发者,他们都是直接对php代码做贡献的人,不像我们这些只能用php。

btw 我也希望自己有一天能够直接对php源码做贡献。

(看完/读完)这篇文章有何感想! www.yzc261.com的分享…

亚洲城娱乐微信开发自定义菜单网页授权问题

( 亚洲城娱乐 )

如图:

微信公众平台接口说明的中说了,对于已关注公众号的用户,如果用户从公众号的会话或者自定义菜单进入本公众号的网页授权页,即使是scope为snsapi_userinfo,也是静默授权,用户无感知。
但是像公众号:逻辑思维 可以点击自定义菜单标签 互动区到网页授权页面。
请问下这是什么机制呢?

没具体看,可能跳转到这个公众号注册的域以外的地址了,所以需要额外授权

微信有接口有配置回调域名的地方,逻辑思维的号应该跳的地址应该不是他在当前公众号配的哪个域名

(看完/读完)这篇文章有何感想! 亚洲城娱乐的分享…

www.yzc261.comPHP 中什么时候用 component 什么时候用 Model,特别迷惑

( www.yzc261.com )

开始使用yii2,但是被里面的弄得很迷惑,component 和 model的区别是什么样的。

以下是一些自己的心得,可能有错误,请指正:

1)发现yii2一些规律,在 @app/models/*文件 有2种类型。比如InfoForm这样以Form结尾的文件都是继承自Model,而Info.php这样的表名的文件都是继承自 ActiveRecord 。但疑问的是在github上看到的一些yii2的程序,里面的全部都写在一个Info.php这样的里面。(不过网络上使用yii2开发的开源程序真的是少得可怜,没有研究)

2)component 与 model的区别到底是在哪里?什么情况下该用component 什么情况下该用model?貌似继承自 ActiveRecord 的 Info.php 这样的就只是一个单独的这样文件:

php
<?php namespace appmodels; use yiiaseActiveRecord; class Info extends ActiveRecord { public function static tableName{ return {{%my_post}}; } }

然后就没有写其他的功能代码了,其他的写在这个地方似乎不合适了。

3)接到上面第2点,比如当我要实现用户的积分扣除功能。流程逻辑应该如下吧:

1.先检测用户当前的积分是否充足?如果不充足失败且提示。
2.执行积分扣除
3.成功写入积分变更日志

像第3点这样的,该写在那个文件,特别让人疑惑 /models/Member.php 还是 /models/MemberQuery.php 还是 /components/Member/ScoresUse.php

4)如果真的像 【积分扣除】【用户封禁】这样的功能都制作成单独的组件components,那么ActiveRecord models那么岂不就真的就只剩下第2点里面说的这一段内容的?另外如果真的是这样,那岂不component 变得异常的庞大,但问题是执行【积分扣除】【用户封禁】这样的操作,不是单独某个表的,如果放到 /models/Member.php 里面去执行,需要调用额外的其他表,显然又不符合规范,显得很混乱。

5)比如 【积分扣除】【用户封禁】这样的操作必须可以让正在登陆用户自行调用,又可以让登陆的管理员自行登陆,所以,似乎归类到 model来说完全不适合? 归类到 component 却又还不如直接用 function 单独函数更方便?比如执行 【积分扣除变更】功能:

php/**
 * @description 操作用户积分!
 * @param $mid
 * @param $jftype
 * @param string $tips
 * @param null $jfValue2
 * @return bool
 */
function log_jifen_change$mid, $jftype, $tips = , $jfValue2 = null
{
    global $dsql;

    $jfvalue = $jfValue2 && is_numeric$jfValue2 ? $jfValue2 : jifen_value$jftype;

    if $dsql->ExecuteNoneQuery2"UPDATE #@__member SET scores=scores+$jfvalue WHERE mid=" . $mid . " " {

        $rs = $dsql->GetOne"SELECT `scores` FROM `#@__member` WHERE `mid`={$mid} ";
        $scoresLeft = $rs[scores];

        $setarr = array
            mid     => $mid, //会员ID
            jftype  => $jftype, //积分代码
            jftime  => time, //操作时间
            jfvalue => $jfvalue, //本次变更积分
            tips    => $tips, //提示内容
            jfleft  => $scoresLeft, //剩余的积分
        ;

        $dsql->ExecuteNoneQuery"INSERT INTO gk_member_jflog SET " . MkSetSql$setarr;

        return $scoresLeft;
    }

    return false;
}

PHP中什么时候该用 component 什么时候该用 model?特别让人迷惑。。。

真是,一下问这么多问题好难回答。

  1. 先说说什么时候继承 Model 什么时候继承 ActiveRecord?

当一个表单是操作多个表单的时候,建议你新建一个 From,From 只能继承 Model,每个表都要生成 Model,Model 都继承 ActiveRecord。

  1. component 与 model 的区别到底是在哪里?

我认为他们两个没什么关系啊,component 是组件,model 一般映射一个表单或者一个数据库表。

如果你的积分业务比较多,而又比较复杂你可以写成事件,其他地方调用。

最后安利一下:https://github.com/forecho/awesome-yii2

1、当模型本身对应数据库中的表,有数据库查询时继承ActiveRecord(例如User),当本身不涉及到数据库查询时,继承Model(类似LoginForm,它想操作数据只需引用User模型中的方法操作就行,本身不需要)。ActiveRecord继承自Model,扩展了数据库操作的功能。

2、Model继承自Component,扩展了规则,场景,验证等功能,感觉model文件夹下的一般都继承model和activerecord就行了吧,没必要继承component

3、扣除积分的功能,个人认为应该写在积分model中,对于更复杂的,类似购物流程这个,有人建议再增加一个service层,来处理用到多个model的逻辑。

4、5对于组件等只是了解大体原理,没怎么用过,感觉简单的增加积分什么的,用事件只需要在积分model中写入记录时绑定用户model中的修改总积分的事件就可以吧,至于用行为,一般是好多个类通用时才会用到吧。公共的方法类似工具类一般不会涉及到数据库的操作。

(看完/读完)这篇文章有何感想! www.yzc261.com的分享…

www.yzc261.comPHP 数据接口设计

( www.yzc261.com )

服务A提供数据一天100W的日志数据, B需要写一个接口去抓取服务A的数据,(假定A的100W可以模拟成从数据库取出来) , 现在需要设计一个接口,保证接口可以比较快速的获取100W的数据,获取数据突然中断可以断点继续获取,同时还要保证接口安全

我做过同样的一个数据统计的服务,
A服务,是一台服务器(A服务器
B服务,在另外一台服务器上面(B服务器

最终解决方案是A服务器的数据最终通过文件存储下来,
然后在A服务器上面通过计划任务用 脚本(php的curl)或者简单点 直接rsync命令同步到B服务器,

然后B服务器扫文件内容,然后将数据归档,去重入库等。。

100W的数据量还是很少的。我第一眼看的时候,还以为100M呢。

解决方法比较赞同@sunwenzheng的提议。采用Redis的队列来解决。

解决方法如下:

1.在B服务器搭建队列服务(不搭建在A上,是因为你的A服务器可能是主服务器,减少其压力)
2.A服务器,生成日志之后立即Push到B服务器Redis的队列中。
3.B服务器轮询队列,收集数据插入到数据库。

这样做的好处是,保证了日志记录的时序以及可以控制日志获取的时效。而且针对100W数据绰绰有余。

这么大的数据量,还要求断点续传,幸好是日志数据,实时性应该要求不高。
可以考虑让服务A定时导出到一个文件,然后服务B通过ftp/sftp之类的直接下载,ftp的速度已经够快的了,如果还要更快,可以搭个NFS共享文件。(都是支持断点续传的哦)

对方提供的接口有没有时间参数什么的?如果有就可以进行分批请求,每次记录最后的时间,下次请求使用这个时间做条件就好
你也可以将收到的数据写入redis的队列中,同时另一个进程从redis队列中读取数据批量写入数据库里
楼上的说法,如果可以使用文本的话, 也可以考虑使用 rsync 进行同步

这么大的数据,使用API传输效率太低了点吧。
* 将每日的数据库直接导出成文件(数据量如果太大,可以每小时的数据导出一个文件,或者10W条一个文件)
* 然后服务器B通过Http获取(Http断点续传很容易实现)
* 获取到以后反向解包数据,导入数据库
这样做的好处是实现起来比较简单,不易出错。

可以考虑用分页处理方法。比如100W条,我一次处理1W条,处理完后,在处理下一页的数据。至于这个如何处理,可以先获取总数,然后生成队列任务。在依靠服务器去执行获取数据

(看完/读完)这篇文章有何感想! www.yzc261.com的分享…

亚洲城娱乐正则匹配不包含某字符串的字符串

( 亚洲城娱乐 )

除了前面两个连续&nbsp<br />,其他的<br />全部匹配,请教正则应该怎么写?

&nbsp;&nbsp;<br />  #不匹配

/?<!&nbsp;{2}<br />+/

试试这个:/&nbsp;&nbsp;<br /><br />*/

var matches = &nbsp;&nbsp;<br /><br /><br /><br />.match/&nbsp;&nbsp;<br /><br />*/;
// matches[1] => "<br /><br /><br />"

b.t.w, 偶的正则比较水,坐等楼下大牛解答

(看完/读完)这篇文章有何感想! 亚洲城娱乐的分享…