|
|
|
สอบถามเรื่อง หน่วยความจำขอ ง PHP ในการอ่านเขียนไฟล์ array ขนาดใหญ่ |
|
|
|
|
|
|
|
เพิ่มเติมครับที่หัวไฟล์ openFileArff.php ที่เกิด error
ก็ใส่
set_time_limit(0);
ini_set("memory_limit","10000M");
|
|
|
|
|
Date :
2012-07-31 18:23:40 |
By :
nivet99 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
น่าไม่ได้ก็น่าจะต้องแก้ไขที่ php.ini ครับ
|
|
|
|
|
Date :
2012-08-01 06:29:42 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แก้ไขที่ php.ini แล้วแล้ว ก็ไม่ได้
ท่านใดมีคำแนะนำเพิ่มครับ ขอบคุณครับ
|
|
|
|
|
Date :
2012-08-01 12:56:34 |
By :
nivet99 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมเขียน .net นะ
สำหรับงานที่ใช้หน่วยงานความจำหรือไฟล์ขนาดใหญ่ๆ
ผมจะใช้วิธีเขียนเป็น xml ตอนเขียนก็แบ่งข้อมูลไปเขียนทีละ 1000 เรคคอร์ด
แล้วเขียนด้วยการ append ต่อท้ายไปเรื่อยๆ
เวลาเรียกใช้ก็ query ข้อมูลที่ต้องการมาใช้งานครับ
|
|
|
|
|
Date :
2012-08-01 13:27:45 |
By :
อิอิ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
น่าไม่ได้ก็น่าจะต้องแก้ไขที่ php.ini ครับ
|
|
|
|
|
Date :
2012-08-01 15:08:10 |
By :
coop |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แก้ตามที่ทุกท่านบอกแล้ว ยังไม่ได้
ขออนุณาติ แปะโค้ด ขอคำแนะนำด้วยครับ
.....................
error
Fatal error: Allowed memory size of 1895825408 bytes exhausted (tried to allocate 1500001 bytes) in C:\AppServ\www\lexto\openFileArff.php on line 19
|
|
|
|
|
Date :
2012-10-12 12:04:32 |
By :
vet |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<?
ini_set("memory_limit","10000M");
set_time_limit(0);
?>
<meta http-equiv="Content-Type" content="text/html; charset=windows-874">
<?php
//$flgCopy = copy($_FILES["file_arff"]["tmp_name"],$_FILES["file_arff"]["name"]);// Copy/Upload file
$fileCSV=$_FILES["file_arff"]["name"];
$objCSV = fopen($fileCSV, "r") or die ("ไม่สามารถเปิดแฟ้มข้อมูลนี้ได้") ;
$j=0; //นับบรรทัดทั้งหมด
$N=0; //นับแถวทั้งหมด
$h=0;
while (($objArr = fgetcsv($objCSV, 1500000, ",")) != FALSE) //วนตามบรรทัดที่มีใน file แต่ไม่เกิน 150,000 บรรทัด
{
count($objArr);//จำนวนarrayแต่ละบรรทัด
if($j==2) {
$data_start=explode(" ",$objArr[0]);
$data_start[1]; //=@attribute
}
if($objArr[0]=="@data"){ $h++;} //
$checkCha=substr($objArr[0],0,1);//ตัวอักษรตัวแรกของแต่ละบรรทัด****check ช่วงข้อมูล
if($checkCha=="@" and $checkCha=="") //ช่วงข้อมูล @attribute
{
for ($i=0 ;$i < count($objArr);$i++)
{
$data[$j][$i]=$objArr[$i];
}
}
else //=={ ช่วงข้อมูลที่ใช้คำนวน
{
$data_array_all=explode(" ",$objArr[count($objArr)-1]); //หาจำนวนคอลัมน์ทั้งหมดของแต่ละแถว
$checkValue =0;
$countColumn=$data_array_all[0];
//echo $data_array_all[1]."-"; echo "<br>";
//if($data_array_all[0]!=10000){exit;}
$data_start[1];
if($j==$countColumn+5- $data_start[1]){
//echo "J=$j"."Countcolum=$countColumn"."datastart=".$data_start[1]."<br>";
$countColumnMax= $countColumn - $data_start[1];
for($i=0;$i<$countColumnMax;$i++) //กำหนดค่าเริ่มต้นให้กับ ni[$i]
{
$ni[$i]=0;
}
}
/*if($j ==7097){
echo $objArr[3]
$data_array=explode(" ","@attribute 7094 {course,faculty,student,project}");
$data_array=explode(",",$data_array);
echo $data_array[1];echo "-";
echo $data_array[1];echo "-";
echo $data_array[2];echo "-";
echo $data_array[3];echo "-";
exit;
}*/
$data_array=explode(" ",$objArr[0]); // คอลัมน์แรกของทุกแถวมีเครื่องหมาย {
$str=substr($data_array[0],1); // เอาเครื่องหมาย { ออก
$data_array[0]=$str;
$objArr[0]= $data_array[0]." ".$data_array[1]; //ใส่ค่ากลับเข้าไปใหม่หลังจากเอาเครื่องหมาย { ออกแล้ว
$data_array_last=explode(" ",$objArr[count($objArr)-1]); // คอลัมน์สุดท้ายของทุกแถวมีเครื่องหมาย }
$str_last=substr($data_array_last[1],0,-1); // เอาเครื่องหมาย } ออก
$data_array_last[1]=$str_last;
$objArr[count($objArr)-1]= $data_array_last[0]." ".$data_array_last[1]; //ใส่ค่ากลับเข้าไปใหม่
//หลังจากเอาเครื่องหมาย } ออกแล้ว
for ($i=0 ;$i < $countColumn+1;$i++)
{
$data_array=explode(" ",$objArr[$i-$checkValue]);
//echo $data_array[0]." ".$data_array[1].","; echo "<br>";
if($i<$data_array[0])
{
$data[$j][$i]=0; //เก็บค่าที่เป็น 0
$checkValue +=1;
}
elseif($i==$data_array[0] and $h == 1)
{
$data[$j][$i]=$data_array[1] ;
if($data[$j][$i]>0)
{//echo $j."-".$i;echo "<br>";
$ni[$i]+= 1;//นับจำนวนที่มีค่า > 0 รวม ของแต่ละคอลัมน์
}
}
}
$N +=1; //$j+=1;//นับแถวเฉพาะมีข้อมูล
}
//end else 1
$j+=1;//นับแถวทั้งหมด
}//end while
fclose($objCSV);
?>
|
|
|
|
|
Date :
2012-10-12 12:06:08 |
By :
vet |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เรียก index.php แล้ว include("openFileArff.php"); โค้ด ด้านบน
<?
ini_set("memory_limit","10000M");
set_time_limit(0); //ไม่จำกัดเวลาและต้องไปแก้ที่ ไฟล์ php.ini : max_execution_time = 0 ด้วย
function getTime() {
$timer = explode( ' ', microtime() );
$timer = $timer[1] + $timer[0];
return $timer;
}
$time1=getTime();
//echo 11 * log(1+(882/1365*882/215),2);
//echo round((1+ log(1,2))* log((1+(0.34*0.31)),2),4);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-874">
<title>โปรแกรมคำนวนสูตร ARTW </title>
<?php /*?>
<script src="LongLexTo.java" type="text/javascript"></script>
<script src="LongParseTree.java" type="text/javascript"></script>
<script src="Trie.java" type="text/javascript"></script><?php */?>
</head>
<body>
<form name="form1" method="post" enctype="multipart/form-data" style="display:none;">
<label>
<textarea name="word_cut" cols="100" rows="15"></textarea>
</label>
<label>
<input type="submit" name="Submit" value="Submit">
</label>
</form>
<? //if (isset($_REQUEST[Submit])){
//$n= $_REQUEST[word_cut];
//$w=str_replace ( " ", "", $n );
//echo count($w);
//$c= strlen( $w );//จำนวนคำทั้งหมด
//for( $i=0;$i<$c;$i++){
// $j=$j.$w[$i];
//$sql="select * from lexitron where name='".$j."'"; //echo "<br>";
//$query=mysql_query($sql);
//$num=mysql_num_rows($query);
//if($num==1){
//$rw=mysql_fetch_array($query);
//echo $rw[id];
//echo $rw[name]."|";
//echo $j;echo"<br>";
//$j='';
//}
//}
//}?>
<form action="?" method="post" enctype="multipart/form-data" name="form2">
<table width="100%" border="1" cellpadding="5" cellspacing="0" bgcolor="#FFFF99">
<tr>
<td colspan="2"><div align="center">โปรแกรมคำนวนสูตร ARTW </div></td>
</tr>
<tr>
<td width="27%"><input name="file_arff" type="file" id="file_arff"></td>
<td width="73%"> </td>
</tr>
<tr>
<td><label>
<input name="radiobutton" type="radio" value="1" <? if($_REQUEST[radiobutton]==1){echo "checked";}?> >
ARTW
<br>
<input name="radiobutton" type="radio" value="2" <? if($_REQUEST[radiobutton]==2){echo "checked";}?> >
ARTW(Nor)
<br>
<input name="radiobutton" type="radio" value="3" <? if($_REQUEST[radiobutton]==3){echo "checked";}?> >
Simple Prob</label></td>
<td> </td>
</tr>
<tr>
<td><input type="submit" name="Submit2" value="Calculate"></td>
<td> </td>
</tr>
</table>
</form>
<?
if(isset($_REQUEST['Submit2'])){
if($_REQUEST[radiobutton]==1){ $name_file="ARTW";}
if($_REQUEST[radiobutton]==2){ $name_file="ARTW(Nor)";}
if($_REQUEST[radiobutton]==3){ $name_file="Simple Prob";}
$file=$_FILES["file_arff"]["name"];
$filen=substr($file, 0, -5);
include("openFileArff.php");
//cade
$textGroup=Array("noticias","compras_on_line","servicos","esportes","cultura","informatica","internet","lazer","sociedade","saude","educacao","ciencias");
$num_textGroup=count($textGroup);
$countColumnMax=$countColumn; //จะได้ตรงกับช่วงข้อมูล
//echo $countColumnMax;exit; =7094
for($n=0;$n < $countColumnMax+1; $n++){
//echo $n;echo",";
for ($i=0;$i<count($textGroup);$i++){
$A[$i][$n]=0; //กำหนดตัวแปรนับรวมแต่ละกลุ่มที่มีค่ามากกว่า 0
$AC[$i][$n]=0;
}
for ($m=$countColumnMax+ 5;$m<$j ;$m++) { //เริ่มทำตั้งแต่บรรทัดเริ่มมีข้อมูล
//echo $m;
//echo $data[$m][$countColumnMax]."/"; //=ชื่อ Class
$group=array_search($data[$m][$countColumnMax], $textGroup);
if($n==0){ //ค่าเท่ากันเลยใช้แต่ตัวเดียว
$AC[$group][$n]+= 1; //นับ row ทั้งหมดของแต่ละclass
}
// if($data[$m][$n]==''){$data[$m][$n]=0;}
//echo $x." ".$data[$m][$n]."," ;
if($data[$m][$n] > 0){
$A[$group][$n]+= 1; //นับ row ทั้งหมดของแต่ละclass ที่มีค่ามากว่า 0
}
}//echo "<br>";
}
// หา A B C D และค่า prob ของแต่ละกลุ่ม
for ($i=0;$i<$num_textGroup;$i++) {
for ($k=0 ;$k < $countColumnMax ;$k++){
$B[$i][$k]=$ni[$k]-$A[$i][$k];
//echo $ni[$k]."<br>"; //exit;
//echo $AC[$i][$k].",";
$C[$i][$k]=$AC[$i][0]-$A[$i][$k];
}
}
//หาค่า รวมของ 1+log(tf)*log(1+(a/b)*(a/c)) ////////////// ARTW
function cal_artw1($tf,$A,$B,$C) {
if($B==0 || $C==0) {
$value_cal_artw1=0;
}
else {
$v1=round($A/$B,2);
$v2=round($A/$C,2);
if($tf==0){$tf=1;}
//echo "[[round((1+ log($tf,2))* log((1+($v1*$v2)),2),4)]]<br>";
$value_cal_artw1 = round((1+ log($tf,2))* log((1+($v1*$v2)),2),2);
//$value_cal_artw1 =number_format((1+ log($tf,2))* log((1[($A/$B*$A/$C)),2),4);
}
return $value_cal_artw1;
}
function cal_artw2($tf,$A,$B,$C) {
if($B==0 || $C==0) {
$value_cal_artw2=0;
}
else {
$value_cal_artw2 =round(pow((1+ log($tf,2))* log((1+($A/$B*$A/$C)),2),2),2);
}
return $value_cal_artw2;
}
///////////////////////// ARTW3(Nor)//////////////////////////////////////////////////////////////
function cal_artw3($tf,$A,$B,$C) {
if($B==0 || $C==0) {
$value_cal_artw3=0;
}
else {
if($tf==0){$tf=1;}
$value_cal_artwA =(1+ log($tf,2))* log((1+($A/$B*$A/$C)),2);
$value_cal_artwB =pow((1+ log($tf,2))* log((1+($A/$B*$A/$C)),2),2);
$value_cal_artw3=round($value_cal_artwA/$value_cal_artwB,2);
}
return $value_cal_artw3;
}
///////////////////////////////// Simple Prob ///////////////////////////////////////////
function cal_artw4($tf,$A,$B,$C) {
if($B==0 || $C==0) {
$cal_artw4=0;
}
else {
if($tf!=0){
//echo "["."$cal_artw4 = $tf * log(1+($A/$B*$A/$C),2)"."]";
$cal_artw4 =round($tf * (log(1+(($A/$B)*($A/$C)),2)),4);
}
else{
$cal_artw4=0;
}
}
return $cal_artw4;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*if($_REQUEST[radiobutton]==1){
echo "<table border='1' cellspacing='0' cellpadding='1'>";
echo "<tr>";
$cct=1;
for ($m=$countColumnMax+5;$m<$j ;$m++){
echo " <td>No. $cct</td>";
$ARTW[$m] = 0;
for($n=0;$n < $countColumnMax; $n++){
// if($data[$m][$n] > 0){
$group=array_search($data[$m][$countColumnMax], $textGroup);
$ARTW[$m] =cal_artw1($data[$m][$n],$A[$group][$n],$B[$group][$n],$C[$group][$n]);
echo "<td>$ARTW[$m]</td>";
// }
}
echo "<td> $textGroup[$group]</td>";
$cct++;
echo "</tr>";
}
echo "</table> ";
}
if($_REQUEST[radiobutton]==2){
echo "<table border='1' cellspacing='0' cellpadding='1'>";
echo "<tr>";
$cct=1;
for ($m=$countColumnMax+5;$m<$j ;$m++){
echo " <td>No. $cct</td>";
$ARTW3[$m] = 0;
for($n=0;$n < $countColumnMax; $n++){
// if($data[$m][$n] > 0){
$group=array_search($data[$m][$countColumnMax], $textGroup);
$ARTW3[$m] =cal_artw3($data[$m][$n],$A[$group][$n],$B[$group][$n],$C[$group][$n]);
echo "<td>$ARTW3[$m]</td>";
// }
}
echo "<td> $textGroup[$group]</td>";
$cct++;
echo "</tr>";
}
echo "</table> ";
}
if($_REQUEST[radiobutton]==3){
echo "<table border='1' cellspacing='0' cellpadding='1'>";
echo "<tr>";
$cct=1;
for ($m=$countColumnMax+5;$m<$j ;$m++){ /// simple_prob
echo " <td>No. $cct</td>";
$cal_artw4[$m] = 0;
for($n=0;$n < $countColumnMax; $n++){
$group=array_search($data[$m][$countColumnMax], $textGroup);
$cal_artw4[$m] =cal_artw4($data[$m][$n],$A[$group][$n],$B[$group][$n],$C[$group][$n]);
echo "<td>$cal_artw4[$m]</td>";
}
echo "<td> $textGroup[$group]</td>";
$cct++;
echo "</tr>";
}
echo "</table> ";
}
$instrant=$countColumnMax+ 5;
for($n=0;$n < $countColumnMax+1; $n++){
for ($m=$countColumnMax+ 5;$m<$j ;$m++) { //เริ่มทำตั้งแต่บรรทัดเริ่มมีข้อมูล
//echo $data[$m][$countColumnMax]; =ชื่อ Class
$group=array_search($data[$m][$countColumnMax], $textGroup);
$D[$group][$n]=($N-$instrant)-($A[$group][$n]+$B[$group][$n]+$C[$group][$n]); //echo "<br>";
// $D[$group][$n]=$N-$instrant."-(".$A[$group][$n]."+".$B[$group][$n] ."+ ".$C[$group][$n].")"; //echo "<br>";
}
}*/
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////file1//////////////////////////////////////////
/*$fileName = "result/$filen"."f_"."$name_file.arff";
$objWrite = fopen($fileName, "w");
$fxx =@fopen($fileCSV,"r") or die("error");
while($data_origin= @fgets($fxx,1024)){
if($data_origin=="@data\n"){ break;}
fwrite($objWrite,$data_origin);
}
fwrite($objWrite,"@data\n"); $cct=1;
for ($m=$countColumnMax+5;$m<$j ;$m++){
$ARTW3[$m] = 0;
fwrite($objWrite,"{");
for($n=0;$n < $countColumnMax; $n++){
$group=array_search($data[$m][$countColumnMax], $textGroup);
fwrite($objWrite,$n." ".$data[$m][$n].",");
}
fwrite($objWrite,"$countColumnMax $textGroup[$group]}\n");$cct++;
}*/
///// Close file1//////////////////////////////////////////
$fileName = "result/$filen"."_$name_file"."VALUECAL.arff";
$objWrite = fopen($fileName, "w");
$fxx =@fopen($fileCSV,"r") or die("error");
while($data_origin2= @fgets($fxx,1024)){
if($data_origin2=="@data\n"){ break;
}fwrite($objWrite,$data_origin2);
}
fwrite($objWrite,"@data\n");
$cct=1;
for ($m=$countColumnMax+5;$m<$j ;$m++){
$ARTW3[$m] = 0;
fwrite($objWrite,"{");
for($n=0;$n < $countColumnMax; $n++){
$group=array_search($data[$m][$countColumnMax], $textGroup);
$ARTW[$m] =cal_artw1($data[$m][$n],$A[$group][$n],$B[$group][$n],$C[$group][$n]);
fwrite($objWrite,$n." ".$ARTW[$m].",");
}
fwrite($objWrite,"$countColumnMax $textGroup[$group]}\n");
$cct++;
}
?>
<!-- node pad-->
<?
$time2 = getTime();
$resultTime=(($time2)-($time1))/60;
// print "Convert calculate and save to filename : ".$fileName. " is complete <br>";
$formula=array(1=>"log(1+tf)","1-(1/(1+tf))","binary","tf*idf","tf*idf-full","tfc1","tfc2","tlc1","tlc2","simple1Prob","simple2Prob","tf*rf","entropy","ARTW","tf*chi","tf*GI","tf*MI","tf*Odds");
?>
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="outTable" bgcolor="#2B3DE1">
<tr height= "30" >
<td align="center" class="headertext1">รายละเอียดการประมวลผล</td>
</tr>
<td>
<table width="100%" border="0" cellspacing="0" cellpadding="0" bgcolor="#ACF2EF">
<tr >
<td height = 20 width="50%" align= "right" class="text4"> </td>
<td width="50%" align= "left"class="text4"> </td>
</tr>
<tr height = 20>
<td width="50%" align= "right" class="text4">สูตร :</td>
<td width="50%" align= "left"class="text4">ARTW</td>
</tr>
<tr height = 20>
<td width="50%" align= "right" class="text4">ชื่อไฟล์ที่เปิด :</td>
<td width="50%" align= "left"class="text4"><?php echo $fileCSV ?></td>
</tr>
<tr height = 20>
<td width="50%" align= "right"class="text4">เวลาที่ใช้ :</td>
<td width="50%" align= "left"class="text4"><?php echo number_format($resultTime,8) ?> นาที</td>
</tr>
<tr height = 20>
<td width="50%" align= "right"class="text4">ชื่อไฟล์ที่บันทึก :</td>
<td width="50%" align= "left"class="text4"><a href="<?php echo $fileName ?>"><?php echo $fileName ?></a></td>
</tr>
<tr height = 20>
<td width="50%" align= "right"class="text4"> </td>
<td width="50%" align= "left"class="text4"> </td>
</tr>
</table>
</td>
<tr height= "30">
<td > </td>
</tr>
</tr>
</table>
<?
}
?>
</body>
</html>
|
|
|
|
|
Date :
2012-10-12 12:10:03 |
By :
vet |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|