"); ******/ //文字コード設定 mb_internal_encoding("SJIS"); mb_language("Japanese"); $internal_enc = mb_internal_encoding(); //mb_http_output("UTF-8");//テストサーバーでON/会社サーバーOFF(UTF-8) //print("internal_enc=".$internal_enc."
"); //print("mb_http_output=".mb_http_output()."
"); //共通ライブラリインクルード require_once( "cmnlib.php" ); //定数定義 define("DEF_MB_LANG", "ja"); define("DEF_MB_ENC", "SJIS"); define("SMTP_SERVER", "192.168.1.21"); //テスト用(SMTPのサーバー名もしくはIPアドレス) define("ITEM_SEC","[Item]"); define("ADDR_SEC","[MailAddress]"); define("CFG_FILE","mailformphp.csv"); define("MF_HTML","mailform.html"); define("CONF_HTML","confirm.html"); define("FN_HTML","finish.html"); define("MNG_TXT","mng.txt"); define("USER_TXT","user.txt"); define("FAMILYNAME", "familyname");//ユーザ入力姓のフィールド名 define("ERRSENDMAILTO","srvman@mediarium.jp"); define("LOGLIMIT",100); define("MNG"," MNG"); define("USER","USER"); define("PHP_VER", "4"); //PHPのバージョン(5以降の場合、5と設定) //csvファイル読み込み用変数定義 $aFieldName = array(); $aItemName = array(); $aLength = array(); $aAttribute = array(); $aRequire = array(); $aDefaultValue = array(); $data_array = array(); $data = array(); $aMailItem = array(); $aMailAddress = array(); $aCCArray = array(); $aBCCArray = array(); $mdata_array = array(); $mdata = array(); //エラーメッセージ変数定義 $Msg = array(); //送信用変数定義 $m_Subject =""; $mMain = ""; $u_Subject = ""; $uMain = ""; $m_Main = ""; $u_Main = ""; /*****csvファイル読み込み*****/ $file_name = CFG_FILE; //ファイルを読み取りモードで開く $file = fopen($file_name, "r") or die("OPENエラー $file_name"); $fItem = false; $line_no = 0; if(PHP_VER == "5"){ /***PHP5以降のCSV読み込み処理 ******/ while (!feof($file)) { $data_array = fgetcsv_reg($file); $_enc_to=mb_internal_encoding(); $_enc_from=mb_detect_order(); mb_convert_variables($_enc_to,$_enc_from,$data_array); $data = $data_array[0]; if($fItem == false){ //行に[Item]がある場合 if(stristr($data,ITEM_SEC) != false){ $fItem = true; } }else{ //行が"//"で始まる場合スキップ if(substr($data,0,2) == "//"){ continue; } //行が空白の場合ループを抜ける if(strlen($data) == 0 ){ break; } //各カラムを配列に格納 //フィールド名を配列に格納 $aFieldName[$line_no] = $data_array[0]; //項目名を配列に格納 $aItemName[$line_no] = $data_array[1]; //最大文字数を配列に格納 $aLength[$line_no] = $data_array[2]; //項目属性を配列に格納 $aAttribute[$line_no] = $data_array[3]; //必須項目を配列に格納 $aRequire[$line_no] = $data_array[4]; //初期値を配列に格納 $aDefaultValue[$line_no] = $data_array[5]; $line_no++; //行数カウント } } fclose($file); }else{ while(!feof($file)){ //1行ずつ読み込む $data_array = fgetcsv($file, 1000, ","); $data = $data_array[0]; if($fItem == false){ //行に[Item]がある場合 if(stristr($data,ITEM_SEC) != false){ $fItem = true; } }else{ //行が"//"で始まる場合スキップ if(substr($data,0,2) == "//"){ continue; } //行が空白の場合ループを抜ける if(strlen($data) == 0 ){ break; } //各カラムを配列に格納 //フィールド名を配列に格納 $aFieldName[$line_no] = $data_array[0]; //項目名を配列に格納 $aItemName[$line_no] = $data_array[1]; //最大文字数を配列に格納 $aLength[$line_no] = $data_array[2]; //項目属性を配列に格納 $aAttribute[$line_no] = $data_array[3]; //必須項目を配列に格納 $aRequire[$line_no] = $data_array[4]; //初期値を配列に格納 $aDefaultValue[$line_no] = $data_array[5]; $line_no++; //行数カウント } } //ファイルを閉じる fclose($file); } /*****フィールド変数名定義*****/ $aDataName = array(); //PHPバージョン判定 $ver = preg_replace("/(\d).(\d).(\d).*/","$1$2$3",phpversion()); if($ver < 410){ // 4.1.0以前の処理 for ($i = 0; $i < $line_no; $i++){ //$sFieldNameにフィールド名格納 $sFieldName = $aFieldName[$i]; $aDataName[$i] = $HTTP_POST_VARS[$sFieldName]; //$aDataName[$i] = mb_convert_encoding($HTTP_POST_VARS[$sFieldName],DEF_MB_ENC,$internal_enc); $aDataName[$i] = ChangeTxtData($aDataName[$i],$internal_enc); $Value[$i] = GetItemValue($aFieldName[$i]);//HTML表示用 } //モード変数定義 $Mode = $HTTP_POST_VARS["mode"]; }else{ // 4.1.0 以降の処理 for ($i = 0; $i < $line_no; $i++){ //$sFieldNameにフィールド名格納 $sFieldName = $aFieldName[$i]; $aDataName[$i] = $_POST[$sFieldName]; //print("aDataName1".$aDataName[$i]."
"); $aDataName[$i] = mb_convert_encoding($_POST[$sFieldName],DEF_MB_ENC,"EUC-JP"); //print("aDataName2".$aDataName[$i]."
"); $aDataName[$i] = ChangeTxtData($aDataName[$i],$internal_enc); //print("aDataName3".$aDataName[$i]."
"); $Value[$i] = GetItemValue($aFieldName[$i]);//HTML表示用 } //モード変数定義 $Mode = $_POST["mode"]; } /*****確認画面表示*****/ if($Mode == conf){ //エラーがなければ送信ボタンが表示 $Errflg = false; //エラーチェック for ($i = 0; $i < $line_no; $i++){ //データが初期値と一致または改行・スペース文字のみの場合 //if($aDataName[$i] == $aDefaultValue[$i] || RePlace($aDataName[$i]) == ""){ if(RePlace($aDataName[$i]) == ""){ //データを空にする $aDataName[$i] = ""; } //必須項目で項目属性が"CheckBox"でない場合 if($aRequire[$i] == "1" && $aAttribute[$i] != "CheckBox"){ $Msg[$i] = RequiredCheck($aDataName[$i],"$aItemName[$i]"); }else if($aRequire[$i] == "2" && $aAttribute[$i] != "CheckBox"){ $count = 0; for($check =$i;$check < $line_no;$check++){ $aDataName[$check] = ChangeStrToBlank($aDataName[$check]); //データが空欄の場合 if($aDataName[$check] == ""){ $count++; } //フィールド名の最後に"__"がある場合 if(substr($aFieldName[$check],-2) == "__"){ break; } } $Msg[$i] = RequiredAllCheck($count,"$aItemName[$i]"); }else if($aRequire[$i] == "3" && $aAttribute[$i] != "CheckBox"){ $count = 0; for($check =$i;$check < $line_no;$check++){ $aDataName[$check] = ChangeStrToBlank($aDataName[$check]); //データが空欄ではない場合 if($aDataName[$check] != ""){ $count++; } //フィールド名の最後に"__"がある場合 if(substr($aFieldName[$check],-2) == "__"){ break; } } $Msg[$i] = RequiredOneCheck($count,"$aItemName[$i]"); } //必須チェックをしてエラーがなかった場合 if($Msg[$i] == ""){ //項目属性が"Text"または"TextArea"の場合 if($aAttribute[$i] == "Text" || $aAttribute[$i] == "TextArea"){ //最大文字数チェック $Msg[$i] = MaxCheck($aDataName[$i],$aLength[$i],"$aLength[$i]"); } //項目属性が"Num"の場合 if($aAttribute[$i] == "Num"){ //半角数字チェック $Msg[$i] = NumCheck($aDataName[$i]); //半角数字チェック後エラーがなかった場合 if($Msg[$i] == ""){ //最大文字数チェック $Msg[$i] = MaxCheck($aDataName[$i],$aLength[$i],"$aLength[$i]"); } //項目属性が"NumHyphen"の場合 }else if($aAttribute[$i] == "NumHyphen"){ //電話番号チェック $Msg[$i] = NumHyphenCheck($aDataName[$i]); //電話番号チェック後エラーがなかった場合 if($Msg[$i] == ""){ //最大文字数チェック $Msg[$i] = MaxCheck($aDataName[$i],$aLength[$i],"$aLength[$i]"); } //項目属性が"UrlAddr"の場合 }else if($aAttribute[$i] == "UrlAddr"){ //Urlアドレスチェック $Msg[$i] = UrlCheck($aDataName[$i],"$aItemName[$i]"); //項目属性が"MailAddrCnf"の場合 }else if($aAttribute[$i] == "MailAddrCnf"){ //メールアドレスチェック $Msg[$i] = MailCheck($aDataName[$i],"$aItemName[$i]"); //メールアドレスチェック後エラーがない場合 if($Msg[$i] == ""){ //最大文字数チェック $Msg[$i] = MaxCheck($aDataName[$i],$aLength[$i],"$aLength[$i]"); } //項目属性が"MailAddr"の場合 }else if($aAttribute[$i] == "MailAddr"){ //メールアドレスチェック $Msg[$i] = MailCheck($aDataName[$i],"$aItemName[$i]"); //メールアドレスチェック後エラーがない場合 if($Msg[$i] == ""){ //最大文字数チェック $Msg[$i] = MaxCheck($aDataName[$i],$aLength[$i],"$aLength[$i]"); //最大文字数チェック後エラーがない場合 if($Msg[$i] == ""){ //確認メールアドレス検索 $Mcnf = false; for($k=$k+1; $k < $line_no; $k++){ //属性が確認メールアドレスの場合jにkを代入 if($aAttribute[$k] == "MailAddrCnf"){ $j = $k; $Mcnf = true; break; } } //確認メールアドレスが検索された場合 if($Mcnf == true){ //メールアドレス・確認メールアドレス一致チェック $Msg[$i] = EqualCheck($aDataName[$i],$aDataName[$j],$aItemName[$i]); } } //最大文字数チェック後エラーがない場合 } //メールアドレス・確認メールアドレスチェック後エラーがない場合 } //属性がメールアドレスの場合 } //必須チェック後エラーがなかった場合 //必須チェック後エラーがあった場合 else{ //データを空にする $aDataName[$i] = ""; } //必須項目で項目属性が"CheckBox"の場合 if($aRequire[$i] == "1" && $aAttribute[$i] == "CheckBox"){ $count = 0; for($check =$i;$check < $line_no;$check++){ //チェックが入っている場合 if($aDataName[$check] != ""){ $count++; } //フィールド名の最後に"__"がある場合 if(substr($aFieldName[$check],-2) == "__"){ break; } } $Msg[$i] = CheckCount($count,$aLength[$i],$aItemName[$i]); } //エラーがある場合 if($Msg[$i] != ""){ $Errflg = true; //修正ボタンのみ表示 } } //for require(CONF_HTML); /*****確認画面から入力画面に戻る*****/ }else if($Mode == back){ require(MF_HTML); /*****送信画面表示*****/ }else if($Mode == send){ //CSVファイルを読み取りモードで開く $file = fopen($file_name, "r") or die("OPENエラー $file_name"); $fMailAddress = false; $mline_no = 0; while(!feof($file)){ //1行ずつ読み込む $mdata_array = fgetcsv($file, 1000, ","); $mdata = $mdata_array[0]; if($fMailAddress == false){ //行に[MailAddress]がある場合 if(stristr($mdata,ADDR_SEC) != false){ $fMailAddress = true; } }else{ //行が"//"で始まる場合スキップ if(substr($mdata,0,2) == "//"){ continue; } //行が空白の場合ループを抜けて終了 if(strlen($mdata) == 0 ){ break; } //各カラムを配列に格納 //項目を配列に格納 $aMailItem[$mline_no] = $mdata_array[0]; //メールアドレスを配列に格納 $aMailAddress[$mline_no] = $mdata_array[1]; //同報送信先指定(CC) if($aMailItem[$mline_no] == "CC"){ $ct = count($mdata_array); for($i = 1; $i < $ct; $i++){ //データが空白の場合ループを抜ける if($mdata_array[$i] == ""){ break; } //メールアドレスを配列に格納 $aCCArray[$i-1] = $mdata_array[$i]; } } //非公開同報送信先指定(BCC) if($aMailItem[$mline_no] == "BCC"){ for($i = 1; $i < $ct; $i++){ //データが空白の場合ループを抜ける if($mdata_array[$i] == ""){ break; } //メールアドレスを配列に格納 $aBCCArray[$i-1] = $mdata_array[$i]; } } $mline_no++; //行数カウント } } //ファイルを閉じる fclose($file); for ($j = 0; $j< $line_no; $j++){ //ユーザー入力アドレスを管理者宛てメール送信元に設定 if($aAttribute[$j] == "MailAddr"){ //全角→半角 '08.03.03修正 $mailFrom = ConvNum($aDataName[$j]); break; } } /* //ユーザの名前(姓)を取得 for ($j = 0; $j< $line_no; $j++){ if($aFieldName[$j] == FAMILYNAME){ $mailName = $aDataName[$j]; break; } } */ //メールアドレス設定 for ($i = 0; $i < $mline_no; $i++){ //管理者宛てメール送信(From:お客様 To:弊社 MODE:0) //ユーザがアドレスを入力していない場合 if($mailFrom == ""){ //送信元アドレス設定 if($aMailItem[$i] == "From"){ $mailFrom = $aMailAddress[$i]; } } //管理者宛て送信先アドレス指定 if($aMailItem[$i] == "ToManager"){ //送信先にアドレスを設定している場合 if($aMailAddress[$i] != ""){ //送信先を設定 $mailTo = $aMailAddress[$i]; //管理者宛てテキストファイル読み込み LoadMailTmpFile(MNG_TXT, $m_Subject, $mMain); //文字列置き換え $m_Main = TxtReplace($mMain); $ret = SendMail($mailTo, $mailFrom, $m_Subject, $m_Main); //メール送信 CreateLog($mailFrom,$mailTo,$ret,MNG); //SenduMail($mailTo, $mailFrom, $aCCArray, $aBCCArray, $m_Subject, $m_Main); //print("ret=".$ret."
"); //print("管理人宛てメール送信。"."
"); } } //ユーザーへの確認メール送信(From:弊社、To:お客様、BCC:弊社BCC用アドレス MODE:1) //ユーザー宛て送信元アドレス設定 if($aMailItem[$i] == "From"){ $u_mailFrom = $aMailAddress[$i]; } //ユーザー宛て送信元名設定 if($aMailItem[$i] == "FromName"){ $u_mailFromName = $aMailAddress[$i]; } //ユーザー宛てメール送信先アドレス指定 if($aMailItem[$i] == "ToUser"){ //送信先が空白の場合→メール送信 if($aMailAddress[$i] == ""){ for ($j = 0; $j< $line_no; $j++){ //ユーザー入力アドレスを送信先に指定 if($aAttribute[$j] == "MailAddr"){ $u_mailTo = ConvNum($aDataName[$j]); break; } } //ユーザー宛てテキストファイル読み込み LoadMailTmpFile(USER_TXT, $u_Subject, $uMain); //文字列置き換え $u_Main = TxtReplace($uMain); //送信先が空でない場合のみ送信 if($u_mailTo != ""){ //$ret = SendMail($u_mailTo, $u_mailFrom, $u_Subject, $u_Main); //メール送信 $ret = SenduMail($u_mailTo, $u_mailFrom, $aCCArray, $aBCCArray, $u_Subject, $u_Main,$u_mailFromName); CreateLog($u_mailFrom,$u_mailTo,$ret,USER); //print("ret=".$ret."
"); //print("ユーザあてメール送信。"."
"); } //送信先が"0"の場合→メールを送信しない }else if($aMailAddress[$i] == 0){ continue; } } //ユーザー宛てメール送信先アドレス指定 }//for /* print("u_mailTo=".$u_mailTo."
"); print("u_mailFrom=".$u_mailFrom."
"); print("mailName".$mailName."
"); print("$u_Main".$u_Main."
"); */ /* print("mailTo=".$u_mailTo."
"); print("mailFrom=".$u_mailFrom."
"); print("$m_Main".$m_Main."
"); */ require(FN_HTML); }else{ require(MF_HTML); } //print("POST_convert18=".i18n_convert($_POST["company"], "SJIS")."
"); //print("POST_convert_encoding=".mb_convert_encoding($_POST["company"], DEF_MB_ENC, $internal_enc)."
"); //print("REQUEST_convert_encoding=".mb_convert_encoding($_REQUEST["company"], DEF_MB_ENC, $internal_enc)."
"); //print("REQUEST_convert18=".i18n_convert($_REQUEST["company"], "SJIS")."
"); //print("REQUEST=".$_REQUEST["companykana"]."
"); //print("aDataName=". $aDataName[0]."
"); //テキストファイル文字列置き換えメソッド function TxtReplace($Text) { global $line_no,$aFieldName,$aDataName,$aItemName; //テキストファイル本文文字列置き換え //本文文字列変更 $sRet = ""; $ReplaceData = "Anser"; $ReplaceItem = "Item"; for ($i = 0; $i < $line_no; $i++){ $DataWord = $ReplaceData.$i; $ItemWord = $ReplaceItem.$i; //$Text = ReplaceString($Text, $aFieldName[$i], $aDataName[$i]); $Text = ReplaceString($Text, $DataWord, $aDataName[$i]); $Text = ReplaceString($Text, $ItemWord, $aItemName[$i]); } //ユーザー情報文字列置き換え $IPAddr = getenv('REMOTE_ADDR'); $HosNamet = getenv('REMOTE_HOST'); $UserAgent = getenv('HTTP_USER_AGENT'); $Text = ReplaceString($Text,"REMOTE_ADDR",$IPAddr); $Text = ReplaceString($Text,"REMOTE_HOST",$HosNamet); $Text = ReplaceString($Text,"HTTP_USER_AGENT",$UserAgent); $sRet = $Text; return $sRet; } //value取得メソッド function GetItemValueRow($sFieldName) { global $line_no,$aFieldName,$aDataName,$aDefaultValue,$Mode; //$sFieldNameがフィールド名にない場合""を返す $sRet = ""; for ($i = 0; $i < $line_no; $i++){ //$sFieldNameがフィールド名と一致した場合 if($aFieldName[$i] == $sFieldName){ //確認画面表示ではない場合 if($Mode != conf){ //データが空白の場合初期値を返す if($aDataName[$i] == ""){ if($aDefaultValue[$i] != ""){ $sRet = $aDefaultValue[$i]; break; } } } $sRet = $aDataName[$i]; break; } } return $sRet; } //value取得メソッド(HTMLテキスト表示用) function GetItemValue($sFieldName) { global $ver; $sRet =""; if($sFieldName != ""){ $name = GetItemValueRow($sFieldName); if($ver < 410){ // 4.1.0以前の処理 $sRet = htmlspecialchars($name, ENT_QUOTES); }else{ // 4.1.0以降の処理 $sRet = htmlspecialchars($name, ENT_QUOTES,DEF_MB_ENC); } } return $sRet; } //セレクトボックスselected設定メソッド function GetSelected($sFieldName,$Value) { global $line_no,$aFieldName,$aDataName,$aDefaultValue,$Mode; //$sFieldNameがフィールド名にない場合""を返す $sRet = ""; for ($i = 0; $i < $line_no; $i++){ //$sFieldNameがフィールド名と一致した場合 if($aFieldName[$i] == $sFieldName){ if($aDataName[$i] == $Value){ $sRet = "selected"; } //初期表示の場合 '07.08.03追加 if($Mode != conf){ if($aDataName[$i] == ""){ //初期値を返す if($aDefaultValue[$i] == $Value){ $sRet = "selected"; } } } break; } } return $sRet; } //ラジオボタン・チェックボタンchecked設定メソッド function GetChecked($sFieldName,$Value) { global $line_no,$aFieldName,$aDataName,$aDefaultValue,$Mode; //$sFieldNameがフィールド名にない場合""を返す $sRet = ""; for ($i = 0; $i < $line_no; $i++){ //$sFieldNameがフィールド名と一致した場合 if($aFieldName[$i] == $sFieldName){ if($aDataName[$i] == $Value){ $sRet = "checked"; } //初期表示の場合 '07.08.03追加 if($Mode != conf){ if($aDataName[$i] == ""){ //初期値を返す if($aDefaultValue[$i] == $Value){ $sRet = "checked"; } } } break; } } return $sRet; } //エラーメッセージ取得メソッド function GetErrMessage($sFieldName) { global $line_no,$aFieldName,$Msg; //$sFieldNameがフィールド名にない場合err文字を返す $sRet = "err"; for ($i = 0; $i < $line_no; $i++){ //$sFieldNameがフィールド名と一致した場合 if($aFieldName[$i] == $sFieldName){ $sRet = $Msg[$i]; break; } } return $sRet; } //フォームリセット文字列を返すメソッド //初期値が設定されている場合は初期値に戻る(radio,checkbox以外) function GetFormClear(){ global $line_no,$aFieldName,$aAttribute,$aDefaultValue; $sRet = "function FormClear(){"; for ($i=0;$i < $line_no;$i++){ if($aAttribute[$i] == "CheckBox"){ $sRet .= "document.formnew.".$aFieldName[$i].".checked =false;"."\n"; }else if($aAttribute[$i] == "Radio"){ $sRet .= "for(i=0;i< document.formnew.".$aFieldName[$i].".length;i++){"."\n". "document.formnew.".$aFieldName[$i]."[i].checked=false;}"."\n"; }else{ if($aDefaultValue[$i] != ""){ $sRet .= "document.formnew.".$aFieldName[$i].".value = \"".$aDefaultValue[$i]."\";"."\n"; }else{ $sRet .= "document.formnew.".$aFieldName[$i].".value = \"\";"."\n"; } } } $sRet .="}"; return $sRet; } //POSTで受け取ったデータ変換 function ChangeTxtData($Str,$internal_enc){ if($internal_enc == "SJIS" || $internal_enc == "UTF-8"){ //バックスラッシュ取り除き //$Str = stripslashes($Str); } if($internal_enc == "EUC-JP"){ //半角ダブル・シングルクォート・\マークを全角に変換 $Str = ConvHanToZen($Str); } //半角ダブル・シングルクォート・\マークを全角に変換 $Str = ConvHanToZen($Str); //半角カナを全角カナに変換 $Str = KanaHanToZen($Str); //×を「x」に変換(表示で文字化けが発生するため)'08.07.17追加 $Str = KakeruToX($Str); //$Str = izonReplace($Str); return $Str; } //年セレクト(指定した年〜指定した年) function CreateYearSelect($Name,$Value,$Firstyear,$LastYear){ $Ret = ""; return $Ret; } //月セレクト(1〜12月) function CreateMonthSelect($Name,$Value){ $Ret = ""; return $Ret; } //日セレクト(1〜31日) function CreateDaySelect($Name,$Value){ $Ret = ""; return $Ret; } /*** SENDMAILのログを取ります * [注意]親ディレクトリのパーミッションは[0777]or[0775] * にしてください。 ***/ function CreateLog($from,$to,$flg,$per){ $ret = true; $logfile = "mailform.log"; $today = date("Y-m-d H:i:s"); if($flg){ $logString = "$per DATE[$today] FROM[$from] TO[$to]"; }else{ $logString = "SENDERR!! $per DATE[$today] FROM[$from] TO[$to]"; } if(!$flg){ $logString2 = $logString."\nPATH[".realpath("./")."]\n"; $ret = SendMail(ERRSENDMAILTO, ERRSENDMAILTO, "MailFormERR!!", $logString2); } if(!file_exists($logfile)){ touch($logfile); chmod($logfile,0606); } $fd = file($logfile); $cut = count($fd); if($cut>LOGLIMIT){ $fp = fopen($logfile, "r"); $allline = array(); $i=0; while(!feof($fp)) { $line = fgets($fp,4096); array_push($allline,$line); } fclose($fp); $fp = fopen($logfile, "w"); $i=2; while($line = $allline[$i]){ fwrite($fp, $line); $i++; } fclose($fp); } if($fp = fopen($logfile, "a")){ fputs($fp,$logString."\n"); fclose($fp); }else{ $ret = false; } return $ret; } /** * ファイルポインタから行を取得し、CSVフィールドを処理する(PHP5以上の場合使用) * @param resource handle * @param int length * @param string delimiter * @param string enclosure * @return ファイルの終端に達した場合を含み、エラー時にFALSEを返します。 */ function fgetcsv_reg (&$handle, $length = null, $d = ',', $e = '"') { $d = preg_quote($d); $e = preg_quote($e); $_line = ""; while ($eof != true) { $_line .= (empty($length) ? fgets($handle) : fgets($handle, $length)); $itemcnt = preg_match_all('/'.$e.'/', $_line, $dummy); if ($itemcnt % 2 == 0) $eof = true; } $_csv_line = preg_replace('/(?:\r\n|[\r\n])?$/', $d, trim($_line)); $_csv_pattern = '/('.$e.'[^'.$e.']*(?:'.$e.$e.'[^'.$e.']*)*'.$e.'|[^'.$d.']*)'.$d.'/'; preg_match_all($_csv_pattern, $_csv_line, $_csv_matches); $_csv_data = $_csv_matches[1]; for($_csv_i=0;$_csv_i