2014-10-12 2 views
0

리눅스 시스템전화로 기능 오류

내 기능에 대한 도움말을 찾으십시오. 나는 그들을 새로운 배우게됩니다. 동일한 코드를 너무 많이 쓰지 않도록하는 함수를 만드는 것은 언급되었습니다.

나는 그들에 관해 많은 페이지를 발견했는데 도움을 주었지만 여전히 문제가 발생했다.

로그 오류가 발생하지 않으며 아무 것도 생성되지 않습니다. 나는 무언가로 시작할 때 항상 실수를해서 뭔가를 놓친다는 것을 압니다.

여기까지 제가 지금까지 있습니다.

미리 감사드립니다. 가 동일하고, 그 부분이 작동하는지

<?php 

$dirPath = "Path to File Location"; 
$buildPath = "Path to File Location"; 

function createFiles() { 
    for ($i = 1; $i < 45; ++$i) { 
     $filename = $buildPath . '/$area'. sprintf("%02s", $i) . '.php'; 
     if (!file_exists($buildPath$filename)) { 
      $myfile = fopen($buildPath$filename, "w") or die("Unable to open item$i file!"); 
      fwrite($myfile, $txt1); 
      fwrite($myfile, $addtitle); 
      fwrite($myfile, $incltxt); 
      fclose($myfile); 
      chmod("$buildPath"."$area"."$i".".php", 0755); 
     } 
     // fopen, fwrite, fcloses... 
     // filename for delete page setup 
     if (!file_exists("$dirPath"."delete.page.php")) { 
      $myfile = fopen("$dirPath"."delete.page.php", "w") or die("Unable to open file!"); 
      $txt = "<option value=\"\">Select Page to Delete......</option>\n 
        <option value=\"generalinfo.tx\">General Information Page.</option>\n 
        <option value=\"$filename\">$area Pg. $i</option>\n"; 
      fwrite($myfile, $txt); 
      fclose($myfile); 
      chmod("$dirPath"."delete.page.php", 0755); 
     } 
     else 
      { 
       $myfile = fopen("$dirPath"."delete.page.php", "a") or die("Unable to open file!"); 
       $txt = "<option value=\"$filename\">$area Pg. $i</option>\n"; 
       fwrite($myfile, $txt); 
       fclose($myfile); 
       chmod("$dirPath"."delete.page.php", 0755); 
      } 
      break; 
    } 
    return true; 
} 


    if ($i == 1) { 
     createFiles(); 
    } 
    // Once we get more than 4 items written in each file we need a new file. 
    // This can happen maximum 11 times for each session 
    if ($i == 5) { 
     createFiles(); 
    } 
    if ($i == 9) { 
     createFiles(); 
    } 
    if ($i == 13) { 
     createFiles(); 
    } 
    if ($i == 17) { 
     createFiles(); 
    } 
    etc...... 
    if($i == 49) { 
     echo "<br />Maximum of 12 pages hit. Time to delete a few"; 
    } 

?> 
+2

어떤 오류가 발생합니까? –

+0

'$ buildPath. $ filename' ~'$ buildPath. $ filename' –

+1

이것이 예상대로 작동하지 않는다는 표시가 있습니까? 문제를 좁히기 위해 어떤 시도를 했습니까? – David

답변

2

$i이다.

해당 부분이 작동하는 경우 모든 코드가 표시되지 않습니다.

근본적으로 당신이하고있는 것과 동일한이 예제를 보자 :

function createFiles() 
{ 
    $i = 3; 
} 


if ($i == 3) 
{ 
    createFiles(); 
    echo "is 3"; 
} 
else 
{ 
    echo "is not 3"; 
} 

이 항상 메아리 "3 아니다". 함수에 설정된 변수가 A) 동일한 전역 범위 내에 있지 않고 B) 함수가 호출 된 적이 없으므로 var는 설정되지 않습니다.

함수 내의 var가 무언가로 설정된 경우 동일한 함수를 호출해야한다면 함수 밖의 코드에서 함수를 조작 할 수 있습니까?
그것의 캐치 (22)

귀하의 함수 호출 createFiles()$i == 1 경우를 실행하고, 그 VAR를 설정하지 않습니다 게시 된 코드가 항상 널 (null) 또는 (등) 설정이 해제됩니다.
즉, 함수를 호출하는 if 문은 작동하지 않으며 항상 FALSE을 반환하므로 함수가 호출되지 않습니다.

또한 전역 범위를 이해해야합니다. 함수 내의 변수는 함수 내에 있고 함수 외부는 별도입니다.
본질적으로 두 함수는 함수 내부에있는 변수와 외부 변수로 구성되어 있습니다. 그래도 둘 다 $i이라는 전역 범위가 결혼하지 않기 때문에 절대 하나의 변수와 상호 작용하지 않습니다.

함수에 var를 전달하여 함수 외부의 변수 및 데이터를 함수에서 사용할 수 있도록 허용하고 함수 외부에서 데이터를 사용하기 위해 함수에서 하나를 반환 할 수 있습니다.

또한 사용자가 코드를 사용할 때마다 모든 병이 재설정됩니다. 즉, if 번을 사용하여 X 시간을 사용했는지 확인하는 것이 원하는대로 작동하지 않습니다.
이 클라이언트 측을 수행 할 수 없습니다.

세션 또는 쿠키를 설정할 수 있지만 클라이언트가 브라우저 데이터를 정리하고 싶으면 쉽게 건너 뛸 수 있습니다.
정말로 제한하려는 경우 클라이언트가 액세스 할 수없는 영구 데이터 저장 방법이 필요합니다. 파일 또는 데이터베이스 값을 증가시키는 더 확실한 방법이 있습니다.
그런 다음 다시 다음날 양식을 사용할 수 있으면 cron이 테이블을 통과하여 필요에 따라 정리할 수 있습니다.

수정
스크립트를 작동 시키려면 간단한 단계를 거쳐야합니다.

Stage1 : 파일을 추가하거나 그 목적이 무엇이든 함수 자체에서 작동하는 함수를 가져옵니다.
Stage2 : 사용자가 원하는대로 호출되는 기능을 조작합니다. 즉, 사용자가 기능 < 10 (등)을 사용한 경우에만 함수를 호출합니다.

스테이지 1을 몇 개의 하위 스테이지로 나눌 수도 있습니다. 스테이지 1a에서는 올바른 디렉토리에 액세스하는 기능을 얻습니다. Stage1b, 파일에 액세스하는 함수를 가져옵니다. Stage1c, 파일에 함수 쓰기 얻기 등

수많은 기능 영역이있는 스크립트를 모두 한 번에 작성하지 말고 관리 가능한 논리 청크로 나누십시오. 이렇게하면 다른 관심사를 구분하는 데 도움이됩니다.

+0

누군가 내 게시물을 삭제했습니다. 오류를 발견했습니다. 그것은 '/ $ area'와 '.php'주위에 있었는데 - 따옴표로 변경했습니다. "그리고 모든 것이 작동합니다. 모든 도움을 주셔서 감사합니다. – bpross

+0

다시 작동한다면, 우리 모두를 표시하지 않았습니다. 귀하의 질문에 귀하의 코드로 코드, 아무것도 전혀 아무것도하지 않을 것입니다, 아무것도. 다행이야 당신이 정렬되어 :) – James

0

여기 내 업데이트 된 코드입니다. 저는 포기하기 전에 한 가지 더 시도했습니다. 제가 추가하고 추가 한 라인이 있습니다.

어리석은 오류. 네가 어떻게 이런 일을 항상 할 수 있는지 모르겠다. 이것은 PHP에서 함수를 망쳤으며 하루 종일 보냈습니다. 그러나 그것이 효과적이어서 모든 사람들에게 변화를 알려줄 것이라고 생각했습니다.

function createFiles() { 

extract($GLOBALS); 

    for ($n = 1; $n < 45; ++$n) { 
     $filename = $buildPath . $area . sprintf("%02s", $n) . '.php'; 
     $filenameb = $area . sprintf("%02s", $n) . '.php'; 
            //^ length of number you need, 2 in this case 
     if (!file_exists($filename)) { 
     $myfile = fopen($filename, "w") or die("Unable to open item$i file!"); 
     fwrite($myfile, $txt1); 
     fwrite($myfile, $addtitle); 
     fwrite($myfile, $incltxt); 
     fclose($myfile); 
     chmod("$filename", 0755); 
    } 
     break; 
    } 
if (!file_exists("$dirPath"."delete.page.php")) { 
    $myfile = fopen("$dirPath"."delete.page.php", "w") or die("Unable to open file!"); 
    $txt = "<option value=\"\">Select Page to Delete......</option>\n 
      <option value=\"generalinfo.php\">General Information Page.</option>\n 
      <option value=\"$filenameb\">$area Pg. $n</option>\n"; 
    fwrite($myfile, $txt); 
    fclose($myfile); 
    chmod("$dirPath"."delete.page.php", 0755); 
} 
else 
    { 
    $myfile = fopen("$dirPath"."delete.page.php", "a") or die("Unable to open file!"); 
    $txt = "<option value=\"$filenameb\">$area Pg. $n</option>\n"; 
    fwrite($myfile, $txt); 
    fclose($myfile); 
    chmod("$dirPath"."delete.page.php", 0755); 
    } 
return true; 

if ($i == 1) { 
    createFiles(); 
} 
// Once we get more than 4 items written in each file we need a new file. 
// This can happen maximum 11 times for each session 
if ($i == 5) { 
    createFiles(); 
} 
if ($i == 9) { 
    createFiles(); 
} 
if ($i == 13) { 
    createFiles(); 
} 
if ($i == 17) { 
    createFiles(); 
} 
etc...... 
if($i == 49) { 
    echo "<br />Maximum of 12 pages hit. Time to delete a few";