2013-08-16 2 views
0

Я пытаюсь написать функцию, которая подсчитывает изображение при прохождении через файлы для одного случая (из многих случаев), я объявила переменную $imageCount глобальной функцией copyInsertImage, чтобы после изображения успешно вставлен в базу данных, я делаю $imageCount++.PHP-счетчик не сбрасывается

После обработки всех изображений для корпуса код выходит из цикла, функция processImages будет вызвана снова. Тем не менее, я сделал var_dump($imageCount), чтобы распечатать счетчик изображений каждый раз, когда он увеличивается на один, и выяснил, что он не возвращался обратно 0 к $imageCount = 0 при запуске цикла для нового случая.

Мне интересно, связано ли это с объявлением global $imageCount, потому что код работал отлично раньше, чем группировать один и тот же скрипт в функцию. Если да, то каково решение?

Спасибо!

function processImages($path,$patientID,$caseID) 
{ 
    // $path = rootDirectory/patientID 
    global $targetDirectory; 
    $targetPath = $targetDirectory.$patientID; 



    $caseSummaryFolder = $path."/".$caseID."/Summary"; 
    $srcDirPath=$path."/".$caseID."/Summary/slicesdir"; //AKA src 
    $dstDirPath = $targetPath."/".$caseID; 
    //copyCaseImages($caseSummaryFolder,$targetCasePath,$patientID,$caseID); 

    global $status; 
    // print("processImages case path:".$casePath."</br>"); 
    $files = glob($srcDirPath."/*.png"); 

    echo "\n------------NEW CASE------------\n" 
    echo "PATIENT: $patientID \n"; 
    echo "CASE: $caseID \n"; 
    echo "--------------------------------\n" 

    $imageCount = 0; 
    for($i = 0; $i < count($files); $i++) { 
     $file = $files[$i]; 
     $fileName = str_ireplace($srcDirPath."/", "", $file); 
     // if image name doesn't not contain string 'GROT' 
     if(strripos($fileName, "grot") === false) 
     { 
      if(doesImgExist($fileName)!==NULL) { 
       if (compareFileMTime($srcDirPath,$fileName,doesImgExist($fileName))) { 
        echo "There's a newer version of $fileName \n"; 
        copyInsertImage($srcDirPath,$dstDirPath,$fileName,$patientID,$caseID); 
       } 
       else { 
        $imageCount++; 
       } 
      } 
      // copy image to analyzedCp and insert new image into DB 
      else { 
       copyInsertImage($srcDirPath,$dstDirPath,$fileName,$patientID,$caseID); 

      } 
     } 
     else { 
      echo "grot*.png files are not included \n"; 
     } 

    } 
+0

Вместо того чтобы сделать его глобальным, почему бы вам не передать эту переменную в функцию? Затем верните обновленный файл $ imageCount – JRizz

+3

Не нужно ли объявлять '$ imageCount' как глобальное в' processImages() 'тоже? В противном случае вы используете только локальную переменную. – andrewsi

+0

Итак, где $ imageCount определяется как глобальный? –

ответ

1

Если я правильно понял ваш вопрос, кажется, что вы «глобальной повторного объявления $ imageCount» внутри вашей функции «copyInsertImage» и эта функция является частью для петли. Если это действительно то, что у вас есть, тогда проблема заключается в том, что все время, когда ваш for-loop попадает в функцию copyInsertImage, он будет повторно объявлять $ imageCount, это повторное объявление сделает imageCount новой переменной и очистит все, что вы сохранили в Это. Это может быть причиной того, что вы видите $ imageCount = 0.

0

@andrewsi Ответил на мой вопрос.

Мой вопрос был решен путем объявления начального $ imageCount как глобального.

«Если вы используете глобальные переменные, вам нужно объявить их глобальными в каждой функции, которая их использует. В противном случае вы в конечном итоге используете локальную переменную с тем же именем. Это одна из причин, почему следует избегать если это возможно - проще передать переменные в функции, когда они вам понадобятся ».

Спасибо!

Смежные вопросы