一个特殊的新手调试

时间:2010-11-17 20:37:57

标签: php

这是我应该知道的事情之一,但它确实是错误的。我有一个自动执行多个任务的大脚本。首先是上传文件,然后提取文件中的数据,然后导入到mysql中。在调试模式下,它可以很好地工作,但在我的Web前端,在提取上载文件的数据后执行停止。它永远不会进入数据库阶段。

我意识到我在下面使用了这个特殊的代码,我怀疑:

$newFilePath = $upload_directory."/".$inFileName;
//opening the input file
if($inFileName != "")
$inputFile = fopen($newFilePath,"r");
else exit(1);
if(!$inputFile)
exit(0);
while(!feof($inputFile)) {

很明显,使用的exit()终止了脚本,从而省略了处理数据导入mysql的行。上面的内容,上传工作和数据分离,但导入从未执行。经过一些研究后,我通过做一些非常合适的事情来审查这部分:

if (file_exists($inFileName)){
        $inputFile = fopen($newFilePath,"r");
    }
    else {
        echo "No file found ";
    }

    if (is_readable($inputFile)){
        echo " ";
    }else {
        echo 'The file could not be read';
    }   

现在这段代码审查并没有让我感觉到,因为甚至无法上传。

现在我的问题是修复代码的这一小部分,以便在执行导入之后获取脚本的其他部分。这对像我这样的初学者来说是一场噩梦。如果有人能以不同的方式审查上述部分,我将不胜感激。我希望看到类似或不同但有效的东西。我学到了比这更强硬的东西,但这只是坚果。我希望有人能理解我的解释。感谢

新编辑。

if (is_array($inFilesArray)) {
foreach($inFilesArray as $inFileName) {

    $numLines = 1;

    $newFilePath = $upload_directory."/".$inFileName;
    //opening the input file
    if (file_exists($newFilePath)){

        if (is_readable($newFilePath)){

            $inputFile = fopen($newFilePath,"r");
        }
    } else {
        echo "File not accessable";
    }

    //reading the inFile line by line and outputting the line if searchCriteria is met
    while(!feof($inputFile)) {
        $line = fgets($inputFile);
        $lineTokens = explode(',',$line);
        // Assign Device ID
        switch ($lineTokens[0]){
            case "IMEI 358998018395510\r\n":
                $device_id = 1;
                break;
            case "IMEI 352924028650492\r\n":
                $device_id = 3;
                break;
            case '$GPVTG':
                $device_id = 2;
                break;

        }
        if(in_array($lineTokens[0],$searchCriteria)) {
            if (fwrite($outFile4, $device_id . "," .$line)===FALSE){
                echo "Problem writing files\n";
            }
            $time = $lineTokens[1];
            $date = $lineTokens[9];
            $numLines++;
        }

        // Defining search criteria for $GPGGA
        $lineTokens = explode(' ',$line);
        $searchCriteria2 = array('OutCell');
        if(in_array($lineTokens[0],$searchCriteria2)) {
            if (fwrite($outFile5, $time.",".$date."\n")===FALSE){
                echo "Problem writing to file\n";
            }
        }
    }

    fclose($inputFile);
}

整个脚本

<?php

#This script has threee parts: The first handles the uploaded files while the second   part retrieves all RMCs and Handover dates and the 3rd handles importation of the data  into their respective table in mysql database.

# This part uploads text files
include 'setamainfunctions.php';

if (isset($_POST['uploadfiles'])) {
$number_of_uploaded_files = 0;
$number_of_moved_files = 0;
$uploaded_files = array();
$upload_directory = dirname(__file__) . '/Uploads/';
//echo count($_FILES['uploadedFile']['name'])." uploaded ";
for ($i = 0; $i < count($_FILES['uploadedFile']['name']); $i++) {
    //$number_of_file_fields++;
    if ($_FILES['uploadedFile']['name'][$i] != '') { //check if file field  empty or not
        $number_of_uploaded_files++;
        $uploaded_files[] = $_FILES['uploadedFile']['name'][$i];
        //if (is_uploaded_file($_FILES['uploadedFile']['name'])){
        if (move_uploaded_file($_FILES['uploadedFile']['tmp_name'][$i],  $upload_directory . $_FILES['uploadedFile']['name'][$i])) {
            $number_of_moved_files++;
        }

    }

}

echo "Number of files submitted $number_of_uploaded_files . <br/>";
echo "Number of successfully moved files $number_of_moved_files . <br/>";
echo "File Names are <br/>" . implode("<br/>", $uploaded_files)."\n";
echo "</br>";
echo "<p> Please find the processed RMCs and corresponding handovers as text files named:outputRMCs.txt and OutputHandovers.txt in the Setapro project root folder</p>";
/*  echo "<br/>";
 echo "<br/>";
 echo "<p> Result of Mobile GPRMCs Transaction";
 //echo "Total entries imported:.$numlines . <br/>";
 echo "Data extraction and import mobile mobile GPRMCs successfuly completed";
 echo "<br/>";
 echo "<br/>";
 echo "<p> Result of Handover Transaction";
 //echo "Total entries imported:.$numlines . <br/>";
 echo "Data extraction and imports for mobile handovers successfuly completed";*/

}

# This is the start of a script which accepts the uploaded into another array of it   own for extraction of GPRMCs and handover dates.

$searchCriteria = array('$GPRMC');

//creating a reference for multiple text files in an array

/*if(isset($_FILES['uploadedFile']['name']))
 $_FILES['uploadedFile'] = '';
 }else {
echo "yes";
}*/
$inFilesArray = ($_FILES['uploadedFile']['name']);

//$inFiles =    fopen($_FILES['uploadedFile']['tmp_name'], 'r');

//This opens a textfile for writing operation and puts all the entries from the      multiple text files into one distinct textfile
if( ($outFile4 = fopen("outputRMCs.txt", "a")) === false ){
echo " ";
}
$outFile5 = fopen("outputHandovers.txt", "a");

//processing individual files in the array called $inFilesArray via foreach loop

if (is_array($inFilesArray)) {
foreach($inFilesArray as $inFileName) {

    $numLines = 1;

    $newFilePath = $upload_directory."/".$inFileName;
    $correctFile = false;
    //opening the input file
    if (file_exists($newFilePath)){

        if (is_readable($newFilePath)){

            $inputFile = fopen($newFilePath,"r");
            $correctFile = true;
        }
    }
    if (!$correctFile)
    echo "File not accessable";

    //reading the inFile line by line and outputting the line if  searchCriteria is met
    while(!feof($inputFile)) {
        $line = fgets($inputFile);
        $lineTokens = explode(',',$line);
        // Assign Device ID
        switch ($lineTokens[0]){
            case "IMEI 358998018395510\r\n":
                $device_id = 1;
                break;
            case "IMEI 352924028650492\r\n":
                $device_id = 3;
                break;
            case '$GPVTG':
                $device_id = 2;
                break;

        }
        if(in_array($lineTokens[0],$searchCriteria)) {
            if (fwrite($outFile4, $device_id . "," .$line)===FALSE){
                echo "Problem writing files\n";
            }
            $time = $lineTokens[1];
            $date = $lineTokens[9];
            $numLines++;
        }

        // Defining search criteria for $GPGGA
        $lineTokens = explode(' ',$line);
        $searchCriteria2 = array('OutCell');
        if(in_array($lineTokens[0],$searchCriteria2)) {
            if (fwrite($outFile5, $time.",".$date."\n")===FALSE){
                echo "Problem writing to file\n";
            }
        }
    }

    fclose($inputFile);
}

//close the in files
fflush($outFile4);
fflush($outFile5);
}


fclose($outFile4);
fclose($outFile5);

#End of script for handling extraction

# This is the start of the script which imports the text file data into mysql  database   and does the necessary conversion.

$FilePath1 = $_SERVER["DOCUMENT_ROOT"] . '/setapro/outputRMCs.txt';

if (is_readable($FilePath1)) {
$handle = fopen($FilePath1, "r");
rmc_handoverHandler($handle);
echo "";
fclose($handle);
} else {
echo 'The file could not be read';

}

#Begining of script to handle imports into handover table

$FilePath2 = $_SERVER["DOCUMENT_ROOT"].'/setapro/outputHandovers.txt';
if (is_readable($FilePath2)) {
$handle = fopen($FilePath2, "r");
mobile_handoverHandler($handle);
echo "";
fclose($handle);
} else {
echo 'The file could not be read';
}

#End of script for handling imports into handover table

?>

1 个答案:

答案 0 :(得分:0)

在我看来,你想做更像这样的事情......

$newFilePath = $upload_directory."/".$inFileName;
$goodFile=false;

//Does the file exist?
if (file_exists($newFilePath)){ 

    //If so, is it readable?
    if (is_readable($newFilePath)){ 

        //if it exists, and it readable, open it
        $inputFile = file_get_contents($newFilePath); 

        //Don't display the error when done because file is good
        $goodFile=true;

        //Do Other stuff with file contents

    }

} 

if (!goodFile) echo "File Access Error";

您想要使用newFilePath,因为它包含路径和文件名。您正在检查文件的存在性和可读性而不传递文件路径(仅文件名)可能是导致问题的原因。

<强>更新

try {
    for ($i = 0; $i < count($_FILES['uploadedFile']['name']); $i++) {
        //$number_of_file_fields++;
        if ($_FILES['uploadedFile']['name'][$i] != '') { 
            $number_of_uploaded_files++;
            $uploaded_files[] = $_FILES['uploadedFile']['name'][$i];
            //if (is_uploaded_file($_FILES['uploadedFile']['name'])){
            if (move_uploaded_file($_FILES['uploadedFile']['tmp_name'][$i],  $upload_directory . $_FILES['uploadedFile']['name'][$i])) {
                $number_of_moved_files++;
            }

        }
    } 
} catch (exception $e){ 
    echo "General Error"; 
}