случай переключения вызывается дважды - PullRequest
0 голосов
/ 11 марта 2012

Предполагается, что мой php-скрипт просто берет имя файла и в определенном каталоге выводит содержимое файла. Проблема заключается в том, что он делает это, НО, по-видимому, еще раз вызывает case, приводящее к ошибкам выбрасывания, я попытался заменить switch на if / else, но все равно он вызывает сам себя (код, связанный с case: «1»). Вот ошибка:

    Warning: fopen(C:/xampp/htdocs/phptut/practice/) [function.fopen]: failed to open stream: No such file or directory in C:\xampp\htdocs\phptut\practice\fileuploadread.php on line 8

    Warning: fread() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\phptut\practice\fileuploadread.php on line 9

    Warning: fclose() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\phptut\practice\fileuploadread.php on line 10

И это код:

    switch($_GET['id']){
        case"1":

            {   //here $file gets the pathtothefile + filename
                $file="C:/xampp/htdocs/phptut/practice/" . $_POST["element"];
                $fh=fopen($file,"r");
                $contents=fread($fh,filesize($file));
                fclose($fh);
                   //It does output the $contents at this point
                echo $contents;

            }
            break;
        default:{

            echo"
                <html>
                        <head>
                            <style type='text/css'>
                                fieldset{
                                    background-color:lightblue;
                                    border-color:blue;
                                    width:50%;
                                    margin-left:auto;
                                    margin-right:auto;
                                    margin-top:200px;

                                }
                                legend{
                                    color:blue;

                                }
                            </style>
                        </head>
                        <body>
                            <fieldset>
                                <legend> Upload Your CV </legend>
                                <form method='POST' name='form' action='fileuploadread.php?id=1'>
                                    <input type='input' name='element' size='20' /><br/>
                                    <input type='submit' value='submit...'/>
                                </form>
                            </fieldset> 
                        </body>
                    </html>
                    ";
    }       }
    ?>

Ответы [ 2 ]

2 голосов
/ 11 марта 2012

Я не уверен, что реальная проблема здесь, но вы должны проверить, что указатель файла хорош, прежде чем использовать его в вызовах fread () и fclose ()

$fh=fopen($file,"r");
if ($fh) {
   $contents=fread($fh,filesize($file));
   fclose($fh);
}

Если есть вероятность, файлне существует, затем проверьте сначала и разберитесь с ним.

if (file_exists($file)) {
   // do something with file
} else {
   // do something else
}
0 голосов
/ 11 марта 2012

Выделяются две вещи:

  1. в $file вы жестко кодируете пути с помощью прямой косой черты, но ваша система Windows использует обратную косую черту - вам лучше будет запросить исходную системупуть к файлу;

  2. switch обычно используется для нескольких вариантов - у вас есть только один и по умолчанию?Вместо этого вы можете попробовать простой if - else в функции и посмотреть, все ли дублирование происходит.

... и, как говорит Адам, добавить небольшую проверку ошибок.

...