php输入流
A. 请问哪位知道,php里 file_get_contents("php://input");这句是什么意思
客户端使用ajax技术中的post方法贺闹向服务器发送的所有内容都可以在服务器中的一个特殊文件php://input中找到.
file_get_contents() 函数把整个文件读入一个字符串中。
和 file() 一样,不同的是 file_get_contents() 把文件读入一个字符串。
file_get_contents() 函数是用于将文件的内容读入到一个字符串中的首选方法。或锋如果操作系统支持,还会使用内存映射技术来增强性能。
语法
file_get_contents(path,include_path,context,start,max_length)参数 描述
path 必需。规定要读取的文件的路径。
include_path 可选。如果也想在 include_path 中搜寻文件的话,可以将该参数设为 "1"。
context 可选。规定文件句柄的环境。
context 是一套可以修改流的行为的选项。若使用 null,则忽略。
start 可选。规定在文件中开始读取的位置。该参数是 PHP 5.1 新加的。
max_length 可选。衫拍晌规定读取的字节数。该参数是 PHP 5.1 新加的。
整个函数把文件内容变成字符串了,你echo看看吧
B. 怎么把EXCEL表里的数据写入数据库
一.使用php
excel
parser
pro软件,但是这个软件为收费软件;
二.可将excel表保存为csv格式,然后通过phpmyadmin或者sqlyog导入,sqlyog导入的方法为:
·将excel表另存为csv形式;
·打开sqlyog,对要导入的表格右击,点击“导入”-“导入使用加载本地csv数据”;
·在弹出的对话框中,点击“改变..”,把选择“填写excel友好值”,点击确定;
·在“从文件导入”中选择要导入的csv文件路径,点击“导入”即可导入数据到表上;
三.一个比较笨的手工方法,就是先利用excel生成sql语句,然后再到mysql中运行,这种方法适用于excel表格导入到各类sql数据库:
·假设你的表格有a、b、c三列数据,希望导入到你的数据库中表格tablename,对应的字段分别是col一、col二、col三
·在你的表格中增加一列,利用excel的公式自动生成sql语句,具体方法如下:
一)增加一列(假设是d列)
二)在第一行的d列,就是d一中输入公式:
=concatenate("insert
into
tablename
(col一,col二,col三)
values
(",a一,",",b一,",",c一,");")
三)此时d一已经生成了如下的sql语句:
insert
into
table
(col一,col二,col三)
values
('a','一一','三三');
四)将d一的公式复制到所有行的d列(就是用鼠标点住d一单元格的右下角一直拖拽下去啦)
5)此时d列已经生成了所有的sql语句
陆)把d列复制到一个纯文本文件中,假设为sql.txt
·把sql.txt放到数据库中运行即可,你可以用命令行导入,也可以用phpadmin运行
C. php 怎样得到输入流的类型
var_mp
D. PHP中put和post区别
1.使用支持和范围的区别:
PHP提供了对PUT方法的支持,在Http定义的与服务器的交互方法中,PUT是把消息本体中的消息发送到一个URL,形式上跟POST类似;
PHP 提供对诸如 Netscape Composer 和 W3C Amaya 等客户端使用的 HTTP PUT 方法的支持;
PHP 4 中,必须使用标准的输入流来读取一个 HTTP PUT 的内容;
PUT方法没有POST方法使用广泛,但PUT方法却是向服务器上传文件最有效率的方法:
2.上传过程的区别:
POST上传文件时,通常需要将所有的信息组合成multipart 传送过去,然后服务器再解码这些信息,解码过程则必不可少的会消耗内存和CPU资源,这种现象在上传大文件时尤其明显;
PUT方法则允许你通过与服务器建立的socket链接传递文件的内容,而不附带其他的信息,效果上更直接;
3.上传效果的区别:
PHP 接受到 PUT 方法的请求时,会把上传的文件储存到和其它用 POST 方法处理过的文件相同的临时目录;请求结束时,临时文件将被删除。
用来处理 PUT 的 PHP 脚本必须将该文件拷贝到其它的地方;
4. POST和PUT请求根本区别
POST请求的URI表示处理该封闭实体的资源,该资源可能是个数据接收过程、某种协议的网关、或者接收注解的独立实体;
PUT请求中的URI表示请求中封闭的实体-用户代理知道URI的目标;
服务器无法将请求应用到其他资源;
如果服务器希望该请求应用到另一个URI,就必须发送一个301响应;
用户代理可通过自己的判断来决定是否转发该请求;
E. api数据接口怎么调用
API:应用程序接口(API:Application Program Interface)
应用程序接口(API:application programming interface)是一组定义、程序及协议的集合,通过 API 接口实现计算机软件之间的相互通信。API 的一个主要功能是提供通用功能集。程序员通过使用 API 函数开发应用程序,从而可以避免编写无用程序,以减轻编程任务。
远程过程调用(RPC):通过作用在共享数据缓存器上的过程(或任务)实现程序间的通信。
标准查询语言(SQL):是标准的访问数据的查询语言,通过通用数据库实现应用程序间的数据共享。
文件传输:文件传输通过发送格式化文件实现应用程序间数据共享。
信息交付:指松耦合或紧耦合应用程序间的小型格式化信息,通过程序间的直接通信实现数据共享。
当前应用于 API 的标准包括 ANSI 标准 SQL API。另外还有一些应用于其它类型的标准尚在制定之中。A
F. 执行php.exe程序cli提示错误如何解决
#!/usr/local/bin/php –q
<?php
//Windows平台上,上行应该为:#!C:\php\php.exe -q
echo "你好 PHP CLI!";
?>
不要忘了给该文件设置为可执行的权限:
$ chmod 755 myfile.php
然后直接输入以下命令,按回车键即可以运行:
$ ./myfile.php
如果要在Windows系统下运行该脚本,则不需要设置文件属性,
可以直接运行该脚本。
Microsoft Windows [版本 6.0.6000]
版权所有 (C) 2006 Microsoft Corporation。保留所有权利。
C:\ >myfile.php
你好 PHP CLI!
再重申一次:如果在Windows平台,CLI脚本的第一行一定要写正确php.exe所在的位置,像这样(另外,如果要在CLI脚本中加注释语句,则要把注释写在PHP标签里面,因为CLI解释只认识第一行,不在PHP标签里认为是语法错误):
#!C:\php\php.exe -q
这样,可以看到在命令行下信息已经打印出来,证明该CLI脚本已经成功运行。
2.从命令行上读取参数
如果想从命令行获取参数,CLI可以从$_SERVER['argc']和$_SERVER['argv'']取得参数的个数和值。我们再建立一个文件,名字为testargs.php,脚本代码如下:
#!C:\php\php.exe –q
<?php
//UNIX和Linux平台下应该为#!/usr/local/bin/php –q
echo "测试获取参数:\n";
echo $_SERVER["argc"]."\n";
//显示传入的参数值,从索引1开始显示
echo $_SERVER["argv"][1]."\n";
echo $_SERVER["argv"][2]."\n";
echo $_SERVER["argv"][3]."\n";
echo $_SERVER["argv"][4]."\n";
?>
在命令行输入如下代码:
C:\Users\John>testargs.php Always To Be Best
测试获取参数:
4
Always
To
Be
Best
因为我们输入了一串单词,为“Always To Be Best”,脚本参数以空格分隔。因此,PHP将其计为4个参数,下面对此说明。
$_SERVER["argc"]数组返回一个整型的数,代表从命令行上回车后一共输入了几个参数。
从上例的结果已经看出,要访问已经传入的参数值,需要从索引1开始。因为脚本本身的文件已经占用了索引0,即$_SERVER["argv"][0]。
3.处理I/O通道
PHP最初设计不是用于与用户直接的键盘输入或文本输出结合使用。了解这一设计是至关重要的,因为如果需要在命令行中执行任何操作,都必须能够与用户来回通信。
输入输出(I/O)通道这个思想来源于UNIX系统,UNIX系统提供3个文件句柄,用以从一个应用程序及用户终端发送和接收数据。
我们可以把一个脚本的输出重定向到一个文件:
php world.php > outputfile
如果是在UNIX系统下,也可以使用通道定向到另一个命令或应用程序中。例如:
php world.php | sort.
在PHP 5 CLI中,有一个文件流句柄,可以使用3个系统常量,分别为STDIN、STDOUT和STDERR。下面我们分别介绍。
(1)STDIN
STDIN全称为standard in或standard input,标准输入可以从终端取得任何数据。
格式:stdin (’php://stdin’)
下面的例子是显示用户输入:
#!/usr/local/bin/php -q
<?php
$file = file_get_contents("php://stdin", "r");
echo $file;
?>
这段代码的工作原理与cat命令很相似,回转提供给它的所有输入。但是,这时它还不能接收参数。
STDIN是PHP的标准输入设备,利用它,CLI PHP脚本可以做更多的事情。如下面例子:
#!/usr/local/bin/php -q
<?php
//UNIX平台下第一行应该为#!/usr/bin/php –q
/* 如果STDIN未定义,将新定义一个STDIN输入流 */
if(!defined("STDIN")) {
define("STDIN", fopen('php://stdin','r'))
}
echo "你好!你叫什么名字(请输入):\n";
$strName = fread(STDIN, 100); //从一个新行读入80个字符
echo '欢迎你'.$strName."\n";
?>
该脚本执行后将显示:
你好!你叫什么名字(请输入):
比如,输入Raymond之后,将显示:
欢迎你Raymond
(2)STDOUT
STDOUT全称为standard out或standard output,标准输出可以直接输出到屏幕(也可以输出到其他程序,使用STDIN取得),如果在PHP CLI模式里使用print或echo语句,则这些数据将发送到STDOUT。
格式:stdout (’php://stdout’)
我们还可以使用PHP函数进行数据流输出。如下面例子:
#!/usr/local/bin/php –q
<?php
$STDOUT = fopen('php://stdout', 'w');
fwrite($STDOUT,"Hello World");
fclose($STDOUT);
?>
输出结果如下:
Hello World
例如,echo和print命令打印到标准输出。
#!/usr/local/bin/php –q
Output #1.
<?php
echo "Output #2.";
print "Output #3."
?>
这将得到:
Output #1.
Output #2.Output #3.
说明:PHP标记外的新行已被输出,但是echo命令或print命令中没有指示换行。事实上,命令提示符重新出现在Output #2.Output #3. 所在的行中。PHP拥有的任何其他打印函数将会像此函数一样运行正常,任何写回文件的函数也是一样的。
#!/usr/local/bin/php -q
<?php
$STDOUT = fopen("php://stdout", "w");
fwrite($STDOUT, "Output #1.");
fclose($STDOUT);
?>
以上代码将把php://stdout作为输出通道显式打开,并且php://output通常以与php://stdout相同的方法运行。
(3)STDERR
STDERR全称为standard error,在默认情况下会直接发送至用户终端,当使用STDIN文件句柄从其他应用程序没有读取到数据时会生成一个“stdin.stderr”。
格式:stderr (’php://stderr’)
下面的脚本表示如何把一行文本输出到错误流中。
#!/usr/local/bin/php –q
<?php
$STDERR = fopen('php://stderr', 'w');
fwrite($STDERR,"There was an Error");
fclose($STDERR);
?>
PHP 5.2可以直接使用STDOUT作为常量,而不是定义上面使用的变量$STDOUT,为了兼容之前版本,我们仍使用了自定义变量,如果您使用的是PHP 5.2,则可以参考STDIN的第二个例子。
4.后台运行CLI
如果正在运行一个进程,而且在退出账户时该进程还不会结束,即在系统后台或背景下运行,那么就可以使用nohup命令。该命令可以在退出账户之后继续运行相应的进程。
nohup在英文中就是不挂起的意思(no hang up)。该命令的一般形式为:
nohup –f scriptname.php &
使用nohup命令提交作业,在默认情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件。
nohup scriptname.php > log.txt &
这样,PHP CLI脚本执行后的结果将输出到log.txt中,我们可以使用tail命令查看该内容:
tail -n50 -f log.txt
现在再来实现两个例子,第一个是每隔10分钟自动生成一个静态HTML文件,并一直执行下去。脚本代码如下:
#! /usr/local/bin/php
<?php
set_time_limit(0);
while(true){
@fopen("/usr/local/www/data-dist/content/
article_".time().".html","w");
sleep(600);
}
?>
保存并且退出vi编辑器,然后赋予genHTML.php文件可执行权限:
#>chmod 755 genHTML.php
然后让脚本在后台执行,执行如下命令:
$nohup genHTML.php –f &
执行上述命令后出现如下提示:
[1] 16623
按回车键后将出现shell提示符。上面的提示就是说,所有命令执行的输出信息都会放到nohup.out文件中。
执行上面命令后,每隔10分钟就会在指定的目录生成指定的HTML文件,如article_111990120.html等文件。
如何终止CLI程序的后台运行呢?
可以使用kill命令来终止这个进程,终止进程之前要知道进程的PID号,即进程ID,我们使用ps命令:
www# ps
PID TT STAT TIME COMMAND
561 v0 Is+ 0:00.00 /usr/libexec/getty Pc ttyv0
562 v1 Is+ 0:00.00 /usr/libexec/getty Pc ttyv1
563 v2 Is+ 0:00.00 /usr/libexec/getty Pc ttyv2
564 v3 Is+ 0:00.00 /usr/libexec/getty Pc ttyv3
565 v4 Is+ 0:00.00 /usr/libexec/getty Pc ttyv4
566 v5 Is+ 0:00.00 /usr/libexec/getty Pc ttyv5
567 v6 Is+ 0:00.00 /usr/libexec/getty Pc ttyv6
568 v7 Is+ 0:00.00 /usr/libexec/getty Pc ttyv7
16180 p0 I 0:00.01 su
16181 p0 S 0:00.06 _su (csh)
16695 p0 R+ 0:00.00 ps
16623 p0 S 0:00.06 /usr/local/bin/php /usr/local/www/data/genHTML.php
已经看到PHP的进程ID是:16623,于是再执行kill命令:
$ kill -9 16623
[1]+ Killed nohup /usr/local/www/data/genHTML.php
这时该命令的进程就已经被终止了,再使用ps命令:
$ ps
PID TT STAT TIME COMMAND
82374 p3 Ss 0:00.17 -bash (bash)
82535 p3 R+ 0:00.00 ps
刚才的PHP CLI脚本已经没有了,如果直接运行ps命令无法看到进程,那么就结合使用ps & apos两个命令来查看。
注意:上面例子必须运行在UNIX或者Linux系统中,如FreeBSD、Redhat Linux等,在Windows环境不支持nohup命令。
G. <INPUT TYPE="file" 中的参数是如何传递的
ENCTYPE="multipart/form-data"
<form>标签里要加这样一个参数,不加这参数,上传到服务器的只是文件路径,豪无用处。上传的数据会以一定备尘的表单格式上传到服务器,这个格式是固定的
你在servlet中request.getInputStream打开仿毁禅输入流,然后把里面的数据全部保存到一个文件里去,看看余如这文件你就知道该怎么写了。
H. phpstorm写的程序在控制台运行时输出乱码
产生原因:因为这个开源项目的默认字符编码不对,所以控制台的字符编码也自动变成了UTF-8,而键盘的输入流的默认格式是GBK格式,这样就造成了在GBK转UTF-8的过程中产生的奇数乱码错误(这个问题的解释可以在搜索引擎找到)。
解决办法:
1.在代码区域右键 -> run as -> run configurations -> common(右侧) -> console encoding
出现此错误,此时的编码格式应该是UTF-8,选择Other,这时可能没有GBK选项,没有,则执行之后操作。
2.更改该项目的文本文件编码,项目右键 -> properties -> resource -> 先将 text file encoding调整回GBK,然后再回去重新设置console encoding编码为GBK。
的基础上,通过进一步的推理而概括出来的,因而不
I. POST请求的几种content type类型
content-type是http请求的响应头和请求头的字段。当作为响应头时,告诉客户端实际返回的内容的内容类型。作为请求头时(post或者put),客户端告诉服务器实际发送的数据类型。
在前端开发过程中,通常需要跟后端工程师对接接口的数据格式,不同的数据类型对于服务器来说有不同的处理方式,因此我们需要关注不同的conten-type类型.
1. application/x-www-form-urlencoded
浏览器原生form表单默认的提交方式(在不设置enctype的情况下)。此时请求头的格式如下:
content-type: application/x-www-form-urlencoded;charset=utf-8
form-data: key1=val1&key2=val2
此时后端例如php可以通过$_POST["key1"]的方法来获取参数值。
此种情况下:非字母或数字的字符会被进行编码(编码方式 https://developer.mozilla.org/zh-CN/docs/Glossary/percent-encoding ),这也是为什么这种方式不支持二进制数据的原因。
2. multipart/form-data
与application/x-www-form-urlencoded 的区别是她支持文件的传输,并且它的传输数据放在request-payload里,并且以bounday进行分隔。
POST /test.html HTTP/1.1
Host: example.org
Content-Type: multipart/form-data;boundary="boundary"
--boundary
Content-Disposition: form-data; name="field1"
value1
--boundary
Content-Disposition: form-data; name="field2"; filename="example.txt"
value2
3. application/json
格式是这样的:
POST http://www.example.com HTTP/1.1
Content-Type: application/json;charset=utf-8
{"title":"test","sub":[1,2,3]}
它用来告诉服务端消息主体是 序列化后的 JSON 字符串 ,其中一个好处就是JSON 格式支持比键值对复杂得多的结构化数据。此时php不能直接通过$_POST获取,需要先从php://input里获得原始输入流,再json_decode成对象
4.text/plain
传统的ajax请求提交
function submit2() {
var xhr = new XMLHttpRequest();
xhr.timeout = 3000;
var obj = {a: 1, b: 2};
xhr.open('POST', '/');
xhr.send(obj);
}
另外,对于axios请求,不同的请求方式content-type也不同
function submit3() {
var sence1 = 'name=123&val=456';
var sence2 = {name: 123, val: 456};
axios.post('/', sence1)
}
1. 当传递的是字符串的时候
2. 当传递的是对象的时候
总结
1.传统的ajax请求时候,Content-Type默认为"文本"类型。
2.传统的form提交的时候,Content-Type默认为"Form"类型。
3.axios传递字符串的时候,Content-Type默认为"Form"类型。
4.axios传递对象的时候,Content-Type默认为"JSON"类型
J. php CI 怎么获取 request payload 的值
php 怎么获取像这样的内容啊 用输入流的获取方式获取不到 如file_get_contents("php://input")