bufferphp
Ⅰ 关于php配置文件中output_buffering选项的问题
默认情况下,php buffer是开启的,而且该buffer默认值是4096,即4kb。你可以通过在php.ini配置文件中找到output_buffering配置.当echo,print等输出用户数据的时候,输出数据都会写入到php output_buffering中,直到output_buffering写满,会将这些数据通过tcp传送给浏览器显示。你也可以通过ob_start()手动激活php output_buffering机制,使得即便输出超过了4kb数据,也不真的把数据交给tcp传给浏览器,因为ob_start()将php buffer空间设置到了足够大。只有直到脚本结束,或者调用ob_end_flush函数,才会把数据发送给客户端浏览器。
Ⅱ php 怎么使用 flatbuffer
在Android应用程序中使用Flatbuffers的最简单方法:
JSON数据在应用程序之外的某个地方被转换成FlatBuffer格式的文件(例如,将二进制数据以文件的形式提交,还可以从API直接返回FlatBuffer二进制文件)。
在flatc (FlatBuffer编译器)的帮助下,手工生成数据模型(java类)。
JSON文件存在一定的局限性(不能使用null字段,日期格式也被解析为字符串)。
将来,我们或许会提出更复杂的解决方案。
FlatBuffers编译器
首先,我们需要flatc,即flatbuffers编译器。该编译器可以从Google所属的源代码构建,源代码位于Flatbuffers资源库中。我们下载并克隆它。整个构建过程在FlatBuffers构建文档中都做了描述。如果你是Mac用户的话,需要这样来构建:
在\{extract directory}\build\XcodeFlatBuffers.xcodeproj路径下,打开已下载的源代码。
点击Play按钮或⌘ + R,运行flatc scheme(默认情况下应该是被选中的)。
flatc可执行文件就会在项目的根目录下出现。
现在,我们可以使用schema编译器了,该编译器能够把给定的schema(在Java、C#、python、GO和C++语言中的schema)生成为模型类,还可以把JSON转换成Flatbuffer的二进制文件。
Schema文件
接着,我们必须准备schema文件,该文件定义了要进行序列化和反序列化的数据结构。这个schema将用于flatc创建Java模型,把JSON转换成FlatBuffers的二进制文件。
Ⅲ php分页,就是运行一个PHP程序的时候,在一定条件下要跳转到另一个PHP程序!
通过在php里输出javascript的跳转实现最简单:
<?php
$t=1;
if($t>0){//如果t大于0
echo '<script>';
echo 'location.href="abc.php"';//跳转到abc.php
echo '</script>';
}else
echo '不跳转';
?>
你可以网络hi我一下,我基本在线
Ⅳ PHP里的output_buffering 怎么开启
在PHP.INI可以设置以下与输出缓冲有关的:
名称 默认值 作用范围 修正记录
output_buffering "0" PHP_INI_PERDIR
output_handler NULL PHP_INI_PERDIR 自 PHP 4.0.4 起可用
implicit_flush "0" PHP_INI_ALL 在 PHP <= 4.2.3 版本中是 PHP_INI_PERDIR
简单解释如下:
output_buffering boolean/integer
该选项设置为 On 时,将在所有的脚本中使用输出控制。如果要限制输出缓冲区的最大值,可将该选项设定为指定的最大字节数(例如 output_buffering=4096)。从PHP 4.3.5 版开始,该选项在 PHP-CLI 下总是为 Off。
output_handler string
该选项可将脚本所有的输出,重定向到一个函数。例如,将 output_handler 设置为 mb_output_handler() 时,字符的编码将被修改为指定的编码。设置的任何处理函数,将自动的处理输出缓冲。
注意: 不能同时使用 mb_output_handler() 和 ob_iconv_handler(),也不能同时使用 ob_gzhandler() 和 zlib.output_compression。
注意: 只有内置函数可以使用此指令。对于用户定义的函数,使用 ob_start()。
implicit_flush boolean
默认为 FALSE。如将该选项改为 TRUE,PHP 将使输出层,在每段信息块输出后,自动刷新。这等同于在每次使用 print()、echo() 等函数或每个 HTML 块之后,调用 PHP 中的 flush() 函数。
不在web环境中使用 PHP 时,打开这个选项对程序执行的性能有严重的影响,通常只推荐在调试时使用。在 CLI SAPI 的执行模式下,该标记默认为 TRUE。
参见 ob_implicit_flush()。
设置了肯定会有用的,除非你修改的PHP.INI位置不是系统使用的那个,比如一般是C::\WINDOWS\PHP.INI,当然可以设置到其它地方。另外控制台程序是不缓冲的。
另外,你还可以在程序里面控制输出缓冲,请参考手册里面的“CXIV. Output Control 输出控制函数”那一章,主要有如下函数:
flush -- 刷新输出缓冲
ob_clean -- Clean (erase) the output buffer
ob_end_clean -- Clean (erase) the output buffer and turn off output buffering
ob_end_flush -- Flush (send) the output buffer and turn off output buffering
ob_flush -- Flush (send) the output buffer
ob_get_clean -- Get current buffer contents and delete current output buffer
ob_get_contents -- Return the contents of the output buffer
ob_get_flush -- Flush the output buffer, return it as a string and turn off output buffering
ob_get_length -- Return the length of the output buffer
ob_get_level -- Return the nesting level of the output buffering mechanism
ob_get_status -- Get status of output buffers
ob_gzhandler -- ob_start callback function to gzip output buffer
ob_implicit_flush -- Turn implicit flush on/off
ob_list_handlers -- List all output handlers in use
ob_start -- Turn on output buffering
output_add_rewrite_var -- Add URL rewriter values
output_reset_rewrite_vars -- Reset URL rewriter values
例子程序:
<?php
ob_start();
echo "Hello\n";
setcookie("cookiename", "cookiedata");
ob_end_flush();
?>
Ⅳ protocol buffer php效率好吗
没字paramecium字意思草履虫 草履虫种身体圆筒形原物细胞构单细胞物雌雄同体见尾草履虫体180—280微米变形虫寿命短计算寿命间昼夜左右身体形状平面角度看像倒放草鞋底叫做草履虫 草履虫Paramecium纤毛纲代表种原物代表种草履虫淡水般池沼河都采世界已知22种见草履虫(180~300微米)、双核草履虫(80~170微米伸缩泡2两核)、核草履虫(180~310微米3伸缩泡核泡型3~12)、绿草履虫(体80~150微米细胞质内绿藻共见光处培养通体呈绿色核1致密型) 、草履虫见者 草履虫般呈圆筒形前端钝圆端宽略尖形状似倒置草鞋名草履虫全身满纵行排列纤毛纤毛鞭毛结构基本相同虫体表面表膜由3层膜组起缓冲保护作用面细胞质化内质与外质每根纤毛位于表膜基体发整表膜基体由纵横连接纤维连接中国起协调纤毛作用 表膜外质排杆状囊泡结构与表膜垂直排列叫做刺丝泡口于表膜虫体遇刺激刺丝泡射其内容物遇水形细丝用5%亚甲基蓝、稀醋酸或墨水刺激见放刺丝般认刺丝泡具防卫捕食作用 种身体、圆筒形原物见尾草履虫体80~300微米身体形状平面角度看像倒放草鞋底叫做草履虫草履虫全身由细胞组身体表面包着层膜膜密密着许纤毛靠纤毛划水运身体侧条凹入沟叫口沟相于草履虫嘴巴口沟内密纤毛摆能水细菌机碎屑作食物摆进口沟再进入草履虫体内供其慢慢消化吸收残渣由叫肛门点孔排草履虫靠身体外膜吸收水氧气排二氧化碳见草履虫具两细胞核:核主要营养代谢起重要作用核主要与殖作用关 草履虫营吞噬营养较复杂消化细胞器由虫体近前端始条口沟斜着伸向身体部口沟末端与表膜相连处形胞口面连着漏斗形胞咽食物(细菌、物腐烂机物等)通口沟处纤毛摆进入胞口胞咽端积聚泡细胞质包裹胀形食物泡固定路径流与溶酶体融合进行消化能消化残渣由身体部胞肛排虫体外 内、外质间2伸缩泡体前部体部每伸缩泡向周围细胞质伸放射排列收集管些收集管端部与内质中国管相通伸缩泡主泡收集管由束微管组收缩丝内质中国收集水及代谢废物通收缩丝收缩进入收集管注入伸缩泡表膜孔(排泄孔)排虫体外前2伸缩泡交替收缩维持其体内水平衡见伸缩泡功能调节渗透压排泄 草履虫殖性殖性殖性殖横二裂核先进行丝裂核再进行丝裂细胞质二虫体部横断2新体性殖接合殖2草履虫口沟口沟粘合起粘合处细胞膜溶解两虫体细胞质相通核离核裂2形4核其3解体剩1核裂等2核核逐渐消失两虫体互换其新核并与较核融合程相于受精作用两虫体接合核裂38核4变核其余4核3解体剩1核裂2核再裂4核每虫体裂2结原接合两亲本虫体各形4草履虫新形8草履虫都核核 元音字母e重读音节发元音/i/音发音舌端靠近齿舌前部抬高接触颚发任何摩擦牙床接近合唇形扁平音现字首、字字尾位置: even 偶数 meter 米 fever 发烧 zebra 斑马 he (主格) we 我(主格) me 我(宾格) be 希望我能帮助解疑释
Ⅵ PHP 如何将上传的文件转化为buffer数据格式
$upfile=readfile($_FILES['fileField']['tmp_name']);
就可以了。如果想用get方式传输文件的话,就把它base64一下,变成字符串。
$str=base64_encode($upfile);
就可以把生成的字符串放到url的get参数里来传输。
Ⅶ PHP实现文件下载
2种方法
1直接做个超链接,地址为文件的地址
<ahref="文件地址">下载</a>
2流输出
<?php
$file=fopen('文件地址',"r");
header("Content-Type:application/octet-stream");
header("Accept-Ranges:bytes");
header("Accept-Length:".filesize('文件地址'));
header("Content-Disposition:attachment;filename=文件名称");
echofread($file,filesize('文件地址'));
fclose($file);
?>
推荐第二种
因为第一种方法只能下载浏览器不能解析的文件,比如rar啊,脚本文件之类。如果文件是图片或者txt文档,就会直接在浏览器中打开
而第二种方法是直接输出的文件流,不存在上述问题
Ⅷ protocol buffer能在php用吗
要使用之前先到code.google.com上搜索protocol buffer,下载到本地,解压后依次执行:
./configuremakemake checkmake install
最后一步涉及到权限,可能会需要sudo。
二、定义一个proto文件
下面依然是给出一个简单的例子,要使用proto首先需要自己定义一个proto文件,定义一个people.proto文件,内容如下:
message people{
optional string name = 1;
optional int32 height = 2;}三、生成一个python可用的py文件
然后就是生成对应的py文件,命令如下:
protoc -I=./ --python_out=./ people.proto
其中-I是source的路径,--python_out表示对应python库的生成路径,然后是对应的proto文件。当然,pb还支持c++和java,修改--python_out即可。
完成后就有对应的people_pb2.py文件了。导入后即可使用,第一次安装后直接用应该会提示:ImportError: No mole named google.protobuf,这是因为找不到对应的库路径导致,到你下载的pb路径下,找到python路径,执行sudo python setup.py install,执行完后可以通过执行sudo python setup.py test检查是否有安装成功,如果最后提示
----------------------------------------------------------------------
Ran 193 tests in 0.327sOK那么就是安装成功了,此时再导入对应的pb2.py文件即可使用。
四、导入使用的简单例子
给出一个简单的调试例子:
import people_pb2
pbFirstPeople = people_pb2.people()
pbFirstPeople.name = joey
pbFirstPeople.height = 160
print pbFirstPeople
输出结果为:name: joey
Ⅸ php检测上传文件大小的问题
在用PHP进行文件上传的操作中,需要知道怎么控制上传文件大小的设置,而文件可传大小是受到多种因素制约的,现总结如下:
1、php.ini:upload_max_filesize 所上传的文件的最大大小。默认值2M。
2、php.ini:memory_limit 本指令设定了一个脚本所能够申请到的最大内存字节数,默认值8M。如果不需要任何内存上的限制,必须将其设为 -1。如果内存不够,则可能出现错误:Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes)
3、php.ini:post_max_size 设定POST数据所允许的最大大小。此设定也影响到文件上传。要上传大文件,该值必须大于 upload_max_filesize。
4、php.ini:max_execution_time = 30 ; Maximum execution time of each script, in seconds
5、php.ini:max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
6、如果用到mysql的BLOB进行二进制文件存储,则需要设置my.ini:max_allowed_packet=xxM
7、httpd.conf
在 Apache 里面有一个选项是 LimitRequestBody,这个选项可以限制用户送出的 HTTP 请求内容。这个选项可以在 .htaccess 或 httpd.conf 里使用,而如果在 httpd.conf 内使用,分别可以用在 virtualhost 或目录属性设定。而 LimitRequestBody 的设定值是介乎 0 (无限制) 至 2147483647 (2GB)。
例如要在目录 D:/AppServ/www 设定上传限制为 100K,可以在 .htaccess 或 httpd.conf 加入以下语句:
LimitRequestBody 1024000000
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
LimitRequestBody 1024000000Options Indexes FollowSymLinks MultiViews ExecCGIAllowOverride AllOrder allow,denyAllow from all
如果透过 .htaccess 设定,储存档案后会立即生效;如透过 httpd.conf 设定,须要重新启动 Apache。
PHP关于文件上传部分,特别提到表单隐藏域:MAX_FILE_SIZE,意思是接收文件的最大尺寸。文档中给出的例子如下:
<form enctype="multipart/form-data" action="_URL_" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
form>
Send this file:
这里设置MAX_FILE_SIZE = 30000,期待一种可能,使得浏览器在传送文件之前能够依此作出预先判断,如果文件尺寸大于30000字节,则不执行实际的POST动作。也就是不往服务器发送文件内容,而是直接在客户端提醒用户“你试图上传的文件超过30000字节”。
这的确是一个非常棒的主张,但在现实中却暂时无法实现。不是因为这个限制可以“被简单地绕过”,而是IE和FireFox这两个主流浏览器都不支持这个特性。PHP的这个建议尚未被采纳。
MAX_FILE_SIZE还有一个用场:后台PHP会判断接收到的文件大小是否大于这个值,如果超出,$_FILES['thisfile']['error']会被设置为UPLOAD_ERR_FORM_SIZE(2),同时放弃保存临时文件,将$_FILES['thisfile']['size']置0。
这个例子,没问题,表现正常,当我试图上传一个40多K的文件时,PHP程序报告“文件超过MAX_FILE_SIZE”。
但是,如果我们将表单中的MAX_FILE_SIZE从30000减少到1000,情形又如何呢?
上传800字节的文件,正常;
上传40K的文件,PHP报告文件过大,也正常;
上传3000个字节的文件,PHP未报告错误,它成功保存了文件!出乎意料!
问题就出在main/rfc1867.c中判断文件是否超长的这部分代码上。php每次从buffer中读取FILLUNIT字节长度的内容后,首先判断“已经读到的内容长度(total_bytes)”是否大于MAX_FILE_SIZE,然后再增加“已经读到的内容长度(total_bytes)”。这样一来,和预计的结果之间至多会有FILLUNIT字节的误差,而FILLUNIT=1024*5=5K。(点击bug了解详细内容)
这就是说,当MAX_FILE_SIZE<5K时,上传一个大于MAX_FILE_SIZE,但是小于5K的文件是没有问题的。
当然,因为这个设置很容易被绕过,所以服务器端编程不应当依赖于MAX_FILE_SIZE。而且,5K到底是个很小的数值,对大多数上传文件的表单来说没有影响。
PHP中post_max_size,upload_max_filesize, MAX_FILE_SIZE的设置,和客户端上传给服务器端的流量大小无关。
Apache服务器从客户端接收长度不超过LimitRequestBody字节数的请求,然后传送给php模块,php模块再决定是否保存成临时文件,设置$_FILES全局变量,移交给script进一步处理。
这个Apache的LimitRequestBody选项缺省值=0,允许Request body的最大字节数是2G(Linux + Apache)
最后还要注意的是:
html本身能够post数据也是有限制的,不能超过2G。
ftp客户端有文件偏移指针的2GB边界限制,未使用特殊编译flag编译的ftp服务器端或者客户端,无论在什么FS中都不支持大于2GB的文件。不知道PHP会不会也有这种情况。