求教:汉字转拼音程序调试中遇到的问题
小弟初学php,以前只学过c和java,所以程序的风格比较像c,不知道php的正规格式,所以大家看程序时可能有点怪。
最近写了一个程序,程序要实现输入工号,输出以与工号相对应姓名的拼音为邮箱名的地址,并输出初始密码(即工号),同时将该用户的用户名和初始密码存入一个csv文件中。
但在调试过程中遇到了一些问题(具体问题及说明大家可以看程序中的注释,程序中用到的两个文件在附件中):
1、main.php在运行到name.php时,无法返回值,即无法运行return $ret_name .= $teacher_list[$str];
2、pinyin.php文件中的冲突处理部分无法达到预期效果,本来希望在重复的姓名拼音后加1、2、3······来区别,但实际上确是叠加的,即会出现例如zhangsan1234@××.×××的情况。
3、在pinyin.php中的冲突处理部分的foepn语句中为了使指针指向文件头,使用了r参数,但参数为r的情况下,说在文件不存在的情况下不建立文件。但在运行时,虽然有错误提示,但仍会生成一个文件,这是为什么,如何能去除错误提示。
这几个问题困扰了我好长时间,希望大家帮忙解决一下,先谢过各位了。
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>邮箱地址获取</title>
</head>
<body>
<form name="address" action="main.php" method="post" >
请输入工号:
<input type="text" name="number">
<input type="submit" name="chaxun" value="提交">
<input type="reset" name="chongzhi" value="重置">
</body>
<?php
//main.php
require_once "name.php";
require_once "pinyin.php";
if($_POST['chaxun'])
{
$name = Get_Name($_POST['number']);
unset($ret_str);
$address = Get_Pinyin($name);
echo "邮箱地址:".$address;
echo "<br>";
echo "密码:".$_POST['number'];
echo "<br>";
}
require_once "store_as_file.php";
?>
<?php
//name.php
$teacher_list = array();
//该函数用于通过工号来获取姓名
function Get_Name($str){
global $teacher_list;
$ret_name = "";
$str = trim($str);
if(count($teacher_list) == 0){
$handle = fopen("./teacher_list.csv","r");
while(!feof($handle)){
while($date = fgetcsv($handle,1000,",")){
$teacher_list[$date[0]] = $date[2];
}
}
}
fclose($handle);
unset($teacher_list);
//问题1:程序就是运行到这没返回值的,不知道为什么
return $ret_name .= $teacher_list[$str];
}
?>
<?php
//pinyin.php
$pinyin = array();
$z = 1;
//该函数用于将汉字转换为拼音
function Get_Pinyin($str){
global $pinyin;
global $ret_str;
$ret_str = "";
$str = trim($str);
$str_len = strlen($str);
if(count($pinyin) == 0){
$py = fopen("./pinyin.db","r");
while(!feof($py)){
$line = trim(fgets($py));
$pinyin[$line[0].$line[1]] = substr($line,3);
}
fclose($py);
}
for($i = 0;$i<$str_len;$i++){
if(ord($str[$i])>0x80){
$cha = $str[$i].$str[$i+1];
$i++;
if(isset($pinyin[$cha])){
$ret_str .= $pinyin[$cha];
}
}
else{
if(eregi("[a-z0-9]",$str[$i])){
$ret_str .= $str[$i];
}
else{
$ret_str .= "?";
}
}
}
//问题2:冲突检测及处理,处理方式为在重复的拼音后加1、2、3······,但一直出现叠加的现象,开始以为是没有释放$ret_name的原因,故在main.php中加了unset($ret_name);但问题依然没有解决。问题3:在foepn语句中为了使指针指向文件头,使用了r参数,但参数为r的情况下,说在文件不存在的情况下不建立文件。但在运行时,虽然有错误提示,但仍会生成一个文件,请问如何解决。
$tl = fopen("./email_address.csv","r");
while($date = fgetcsv($tl,1000,",")){
$name = explode("@",$date[0]);
if($ret_str == $name[0]){
$ret_str .= $z++;
}
}
fclose($tl);
unset($pinyin);
return $ret_str .= "@××.×××";
}
?>
<?php
//store_as_file.php:该文件功能尚未完全实现,其中对打开文件失败后和写入文件失败后的处理未做完全,不过暂时不影响主要功能的实现
$content = $ret_str;
if(!$cre_file = fopen('./email_address.csv','a')){
echo "打开文件失败,请重新输入";
exit;
}
else{
if(!fwrite($cre_file,$content."\r\n")){
echo "写入文件失败,请重新输入";
exit;
}
else{
echo "成功将 $content 写入email_address.csv";
}
}
fclose($cre_file);
?>