仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1222|回复: 18
打印 上一主题 下一主题

[学习教程] PHP网站制作之PHP输出流input简介

[复制链接]
愤怒的大鸟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:35:07 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
虽说不上很好,但至少一般的数据操作,再在原有的SQL语言的基础上,用得还是可以的。   <p>在利用xml-rpc的时分,server端获得client数据,次要是经由过程php输出流input,而不是$_POST数组。所以,这里次要切磋php输出流php://input
对一php://input引见,PHP官方手册文档有一段话对它停止了很明白地概述。
“php://input allows you to read raw POST data. It is a less memory intensive alternative to $HTTP_RAW_POST_DATA and does not need any special php.ini directives. php://input is not available with enctype=”multipart/form-data”.
翻译过去,是如许:
“php://input可以读取没有处置过的POST数据。相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小,而且不需求特别的php.ini设置。php://input不克不及用于enctype=multipart/form-data”
咱们应当怎样去了解这段概述呢?!我把它划分为三局部,慢慢去了解。
    1. 读取POST数据
    2. 不克不及用于multipart/form-data类型
    3. php://input VS $HTTP_RAW_POST_DATA
读取POST数据
PHPer们必定很熟习$_POST这个内置变量。$_POST与php://input存在哪些联系关系与区分呢?别的,客户端向办事端交互数据,最经常使用的办法除POST以外,还有GET。既然php://input作为PHP输出流,它能读取GET数据吗?这二个成绩恰是咱们这节需求切磋的次要内容。
经历告知咱们,从测试与察看中总结,会是一个很凑效的办法。这里,我写了几个剧本来匡助咱们测试。
@file 192.168.0.6:/phpinput_server.php 打印出吸收到的数据
@file 192.168.0.8:/phpinput_post.php 摹拟以POST办法提交表双数据
@file 192.168.0.8:/phpinput_xmlrpc.php 摹拟以POST办法收回xmlrpc恳求.
@file 192.168.0.8:/phpinput_get.php 摹拟以GET办法提交表单表数
phpinput_server.php与phpinput_post.php
<?php
//@file phpinput_server.php
$raw_post_data = file_get_contents('php://input', 'r');
echo "-------\$_POST------------------\n";
echo var_dump($_POST) . "\n";
echo "-------php://input-------------\n";
echo $raw_post_data . "\n";
?>
<?php
//@file phpinput_post.php
$http_entity_body = 'n=' . urldecode('perfgeeks') . '&p=' . urldecode('7788');
$http_entity_type = 'application/x-www-form-urlencoded';
$http_entity_length = strlen($http_entity_body);
$host = '192.168.0.6';
$port = 80;
$path = '/phpinput_server.php';
$fp = fsockopen($host, $port, $error_no, $error_desc, 30);
if ($fp) {
   fputs($fp, "POST {$path} HTTP/1.1\r\n");
   fputs($fp, "Host: {$host}\r\n");
   fputs($fp, "Content-Type: {$http_entity_type}\r\n");
   fputs($fp, "Content-Length: {$http_entity_length}\r\n");
   fputs($fp, "Connection: close\r\n\r\n");
   fputs($fp, $http_entity_body . "\r\n\r\n");
  
   while (!feof($fp)) {
     $d .= fgets($fp, 4096);
   }
   fclose($fp);
   echo $d;
}
?>
咱们可以经由过程利用东西ngrep抓取http恳求包(由于咱们需求探知的是php://input,所以咱们这里只抓取http Request数据包)。咱们来履行测试剧本phpinput_post.php聪明的你,显然已经逐渐的开悟了,慢慢的理解了编程的概念,那么祝贺你,你已经迈出了成功的第一步。
愤怒的大鸟 该用户已被删除
沙发
 楼主| 发表于 2015-4-25 02:28:05 | 显示全部楼层
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-24 04:04

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表