如何将PHP的结果输出到非PHP页面中

 更新时间:2016年11月25日 16:33  点击:1340
这个问题是当我自已实现了统计计数之后,我想将它的输出用在我的不支持PHP功能的页面中,那么应该如何做呢?主要的解决办法是输出一段javascript脚本即可。这个是很有用的,比如实现动态新闻, 广告轮询,当然这里是讲如何把某个程序的下载计数输出到非PHP页面中去。

  先让我们设想一下:我已经有了一个程序下载计数文件在我的网站上,如../count/download.db。
 
文件格式为:
  索引|文件名提示|链接|计数
注意,这里用"|"线分隔。我采用的是文本文件进行处理。里面可能某一行数据为:
  file1|测试文件1|../download/file1.zip|10
可以看到,下载次数可能已经是10次了。现在我就想把这个10次输出到其它的页面中。
 
  第一步:写Javascript脚本
  很简单:
<script language=javascript src="../bin/output.php?id=file1"></script>
  是不是!src后面是指输出的脚本程序,"?"后面是传入脚本的参数。那么output.php应该输出什么数据
才能被执行呢?应该输出javascript语句,如document.write()之类的语句。这样,浏览器就会把output.php
的输出结果看成一段javascript程序再进行处理,就好象直接写的脚本一样,只不过这段脚本是从别的地方
得到的。
 
  好了,知道应该输出什么样的内容了,就可以写php程序了。
 
  第二步:输出结果

<?
$fp=fopen("../count/download.db", "r");
$flag=FALSE;
while(!feof($fp))
{
$line=fgets($fp, 256);
list($index, $title, $url, $count)=split("|", $line);
if (strtolower($index)==strtolower($id))
{
$flag=TRUE;
break;
}
}
fclose($fp);
if ($flag)
{
echo "document.write($count);";
}
else
echo "document.write("not found");";
?>
  这段代码也很简单,但是有几点要说明。先打开一个文件。$flag表示是否找到指定索引的文件记录,
首先置为FALSE。再是一个循环,条件是文件没有结束。
 
  然后是循环体:取出一行文本,长度最好长点。进行字段分割,以"|"为分割符。注意,使用的split函
数是正则表达式,"|"是一个特殊符号用以用""号。然后分别放入相应的变量中。在这里我们真正关心的是
$index和$count。比较输入的参数$id与取出的索引($index)是否相等,如果相等,则将找到标志设为TRUE,
退出循环。否则查找下一行数据。
 
  结束时,关闭文件,根据是否找到标志输出相应的javascript脚本即可。
 
  对于$id的使用,是PHP自动将调用的URL处?id=xxx进行了处理,可以直接使用。也可以使用
$HTTP_GET_VARS[id]。


首先声明,写此文时,我对这个也不懂,只是自己从php.net上下了例子,试着做了一下,而且是在 win2000 apache php4p12配置下. 具体步骤如下: 一、安装好JVM(java virtual machine)(我用的是jdk122)

当然,您不一定要用jdk122,甚至不用jdk,用其它的,比如:
JVM=Kaffe 1.0.4 (as delivered with OS), OS=Redhat Linux 6.1
JVM=Kaffe 1.0.5 (built from source), OS=Redhat Linux 6.1
JVM=IBM 1.1.8, OS=Redhat Linux 6.1
JVM=Blackdown 1.2.2 RC4, OS=Redhat Linux 6.1
JVM=Sun JDK 1.1.8, OS=Windows NT 4/win2000
但是,在这里我只讲我的做法,其它的我没有试过,不要问我,这里要特别注意的是, 根据php官方站点的说明,竟然不支持jdk122 linux
二、设置环境变量
在win2000中"我的电脑"->"属性"->"高级"->"环境变量"
设置JAVA_HOME
为:jdk路径,比如我的jdk122装在e:jspjdk122下,那么就设置为e:jspjdk122
三、下载相关文件(如果您没有的话)
下载地址:http://www.php.net/downloads.php
我下载了:php-4.0.1-Win32-java-jdk122.zip文件,解压后有几个例子,并且有:php_java.dll和php_java.jar文件.
四、配置php.ini文件
[java]
java.class.path=E:PHP4php_java.jar
java.home=E:jspjdk122in
extension=php_java.dll
java.library.path=E:PHP4ext
java.library=E:Program FilesJavaSoftJRE1.2inclassicjvm.dll
以上是我的配置,说明一下,我的php4在e:php4目录下,我的所有扩充的dll文件 放在e:php4ext目录下,当然php_java.dll也就应该copy到这个目录了.最后确认你的 win2000下有jvm.dll文件,如果没有,安装一下visual studio就可以了(我用装了个VC 6,所以不用考虑了)
五、测试
运行phpinfo()就可以看到有"java"了,如果没有,说明你没有成功.它的显示如下:
java
Directive Local Value Master Value
java.class.path
E:PHP4php_java.jar E:PHP4php_java.jar
java.home
E:jspjdk122in E:jspjdk122in
java.library
E:Program FilesJavaSoftJRE1.2inclassicjvm.dll jvm.dll
java.library.path
E:PHP4ext no value
六、测试例子
我用的是下载的文件中包含的例子:jver.php,如果成功,将有如下结果:
Java version=1.2.2
Java vendor=Sun Microsystems Inc.
OS=Windows NT 5.0 on x86
星期三, 七月 19, 2000 at 10:32:53 下午 GMT 08:00


●简繁转换有四种情况
  汉字转换,分为内码转换和简繁转换。
  内码转换属于简繁转换,但是他主要是在GB码和BIG5码之间转换。
  另外一种简繁转换是在GB码内部的转换。GB码扩展集包含两万多个汉字,自然也存在简繁转化问题。例如,大陆网友从BIG5码繁体字网页用“复制--粘贴”的方法虽然得到的是繁体字文件,但他已经不是BIG5码的字体了。尽管页面的内码是BIG5码,但是经过复制--粘贴,已经变成了GB内码的繁体字,粘贴到“笔记本”时不是乱码,要知道,大陆简体windows系统的笔记本,是不能识别BIG5码的。若要把这繁体字变为简体字,用一般的方法可就不行了。
  所以,不要以为繁体字就都是BIG5码。因此,汉字转换分为四种情况:
  1。GB转BIG5
  2。BIG5转GB
  3。简体字转繁体字(在GBK大陆内码中转换)
  4。繁体字转简体字(同上)
●网页“另存为”的转换特点。利用网页“另存为”转换汉字内码。
  当我们把某个BIG5的网页用“另存为”的方式保存时,你注意看,“保存WEB页”窗口最下方有个“编码”栏,里面至少有三种选择:Unicode(UTF-8),繁体中文(BIG5),简体中文(GB2312)。
本网页的内码是Unicode(UTF-8),所以能够同时显示GB码和 BIG5码汉字。你选择不同的内码保存,就已经进行了内码转换。利用这个特点,我们可以用网页“另存为”转换汉字内码。
●网上在线汉字转换,大多是内码转换。若想把复制下来的GB码繁体字转换为同内码的简体字,或者相反,网上的转换功能显然不足。
●《金山快译》包含两个文件:KConvert.exe和Cjktab32.dll,总共大小才484K,压缩成RAR文件後仅仅235K。可以直接提取出来单独使用。他可以进行上述四种汉字的任意转换。
  我已将金山快译的这两个文件上传,要用的网友可以下载。
金山快译的内码转换(解压可用,无须安装)
■http://202.202.4.200/upload/upfile/gb-big5.rar■
●手工修改个别字
  不过,绝大多数汉字转换软件有个小问题,简体到繁体自动转换时,个别字转换有毛病(一对多的毛病),姓范的范,会转换成模 因为某程序要用输出UTF-8编码..但是原数据是GBK编码的
百度 找了很多有关内码转换的类..但是缺点很多.又不支持GBK TO UTF-8
不过一个一个找还是在PHP官方的FAQ找到了mb_convert_encoding() 该函数要在PHP4.0.6以上才有..听说有的
想关链接: http://cn.php.net/manual/zh/function.mb-convert-encoding.php
做一个GBK To UTF-8
< ?php
header("content-Type: text/html; charset=Utf-8");
echo mb_convert_encoding(" 做一个后台登陆需要用到校验码,前台的用户跟踪需要用到SessionID,当然,默认的PHP开启了Session以后就有了一个SessionID,但是我需要自己的,并且能够存储进数据库,那么我就尝试了一下,构造了以下的函数。
/****** 产生Session ID ******/
基本的思路: 是把当前微秒的时间获取, 然后产生以个随机数字, 把随机数字和当前时间相加后加密一下, 最后再截取需要的长度
/*
函数名称:create_sess_id()
函数作用:产生以个随机的会话ID
参 数:$len: 需要会话字符串的长度,默认为32位,不要低于16位
返 回 值:返回会话ID
函数heiyeluren
*/
function create_sess_id($len=32)
{
// 校验提交的长度是否合法
if( !is_numeric($len) || ($len>32) || ($len<16)) { return; }
// 获取当前时间的微秒
list($u, $s) = explode(' ', microtime());
$time = (float)$u (float)$s;
// 产生一个随机数
$rand_num = rand(100000, 999999);
$rand_num = rand($rand_num, $time);
mt_srand($rand_num);
$rand_num = mt_rand();
// 产生SessionID
$sess_id = md5( md5($time). md5($rand_num) );
// 截取指定需要长度的SessionID
$sess_id = substr($sess_id, 0, $len);
return $sess_id;
}

/****** 产生校验码 ******/
思路: 这个思路比较简单,因为考虑独一无二和随机性,我们的校验码就Session ID里面截取一段字符串就可以了,因为我们的SessionID是充分考虑了独一无二的。
/*
函数名称:create_check_code()
函数作用:产生以个随机的校验码
参 数:$len: 需要校验码的长度, 请不要长于16位,缺省为4位
返 回 值:返回指定长度的校验码
函数heiyeluren
*/
function create_check_code($len=4)
{
if ( !is_numeric($len) || ($len>6) || ($len<1)) { return; }

$check_code = substr(create_sess_id(), 16, $len );
return strtoupper($check_code);
}

/****** 生成校验码的图片 ******/
这个就是一些比较简单的PHP图像编程的东西了,我作的图片和简单。
/*
函数名称:create_check_image()
函数作用:产生一个校验码的图片
参 数:$check_code: 校验码字符串,一般由create_check_code()函数来获得
[!--infotagslink--]

相关文章