2

このページ (video.php) を実行しようとすると、次のエラーが表示されます。

解析エラー: 構文エラー、37 行目の /base/path/masked/inc/functions.php の予期しない $end

奇妙なことに、「functions.php」には 37 行以上あります...なぜそこでファイルの終わりを検出するのですか? 各関数の長さは 1 つのステートメント (print ステートメント) だけなので、括弧や括弧が欠落しているとは思いません。

問題を解決するためにいくつかのことを行いました。print_head() と print_foot() の両方の関数定義のステートメントを削除すると、エラーはなくなります (ページの残りの部分は正常に動作します)。関数のいずれかのステートメントを削除すると、別の行で同じエラーが発生します。ページ上で関数定義を移動すると、同じエラーが発生します。print ステートメントの一部を削除しようとしましたが、それでも同じエラーが発生します。

編集:
「videos/transfer/playlist」は、get_vids() が読み込むサンプル ファイルです。これは偶数行のフラット txt ファイルです。奇数行はビデオ ファイルの名前で、偶数行は前のファイルに付随するタイトルです。get_vids() が期待どおりに動作することを確認するためにテストしました。

編集:
コマンドラインからすべてを実行しようとすると、次のようになります。

$ php -l video.php
No syntax errors detected in video.php
$ php video.php

Parse error: syntax error, unexpected $end in /home/nova20/http-dir/orientation/inc/functions.php on line 37
$ php -l inc/functions.php

Parse error: syntax error, unexpected $end in inc/functions.php on line 37
Errors parsing inc/functions.php

これが私のコードです:

video.php:

<?php
include('inc/functions.php');

$type=$_GET['type'];
if($type == '') {
    $type = 'transfer';
}

$vidno = $_GET['vid'];
if($vidno == '') {
    $vidno = 1;
}

$vidindex = $vidno - 1;

$videos = get_vids($type);

$filename = $videos[$vidindex]['file'];
$title = $videos[$vidindex]['title'];
$basedir = "videos/$type";
$vidfile = "$basedir/$filename";

if($vidfile != '') {
    $extra = '<script src="/flowplayer/flowplayer-3.1.4.min.js"></script>';
    print_head($title, $extra);

    print <<<ENDHTML
<p>
<a
    href='$vidfile'
    style="display:block;width:640px;height:498px;"
    id="player"
></a>
</p>

<p id="contlink" style="display:none">
<a href="done.php?type=$type&vid=$vidno">Click Here to continue</a>
</p>

<script language="JavaScript">
    flowplayer(
        "player",
        "/flowplayer/flowplayer-3.1.5.swf",
        {
            clip: {
                onFinish: function(){
                    //window.location = "done.php";
                    //alert('done!');
                    document.getElementById('contlink').style.display = "block";
                }
            },
            plugins: {
                controls: {
                    play:true,
                    volume:true,
                    mute:true,
                    time:true,
                    stop:true,
                    fullscreen:true,
                    scrubber:false
                }
            }
        }
    );
</script>
ENDHTML;

    print_foot();
} else {
    print_head('OOPS!');

    print <<<ENDERROR
<h1>OOPS!</h1>
<p>
It looks like there's no video here.  <a onclick="history.go(-1);return false;" href="#">Go back</a> and try again.
</p>
ENDERROR;

    print_foot();
}
?>

inc/functions.php (問題があると思われる場所):

<?php
function get_vids($type) {
    $base = "videos/$type";
    $playlist = "$base/playlist";

    $vidinfo = file($playlist);

    $videos = array();

    for($i = 0; $i < count($vidinfo); $i += 2) {
        $filename = trim($vidinfo[$i]);
        $title = trim($vidinfo[$i+1]);

        if($filename != '') {
            $index = $i / 2;
            $video['file'] = $filename;
            $video['title'] = $title;

            $videos[$index] = $video;
        }
    }

    return($videos);
}

function print_head($title, $extra = '') {
    print <<<ENDHEAD
<html>
<head>
<title>$title</title>
$extra
</head>
<body>

ENDHEAD;
}

function print_foot() {
    print <<<ENDFOOT

</body>
</html>
ENDFOOT;
}
?>

ビデオ/転送/プレイリスト

1.flv
Introduction
2.flv
Why am I doing this?
3.flv
What can I access with RAIN?
4.flv
How do I access my RAIN Account?
5.flv
How do I Check my registration status?
6.flv
Evaluating transfer credit
7.flv
Transferable degrees
8.flv
Physical Education and History
9.flv
Regents exemptions
10.flv
Academic status
11.flv
How to find my academic advisor?
12.flv
Is Financial Aid available?
13.flv
How do I check my financial aid status?
14.flv
How do I transfer my hope scholarship?
15.flv
Payment information
16.flv
Student Services (Part 1)
17.flv
Student Services (Part 2)
18.flv
Student Services (Part 3)
19.flv
Campus Bookstore
20.flv
Where can I eat on Campus?
21.flv
Where can I live on Campus?
22.flv
How do I register for Parking?
23.flv
Still Have questions?
4

2 に答える 2

4

ファイルの終わり自体を検出するのではなく、実行可能なコード行の論理的な終わりを検出します。

HEREDOC 終了トークン (ENDHEAD; および ENDFOOT;) の前にスペースがないことを確認してください -それらが行の最初のトークンではない瞬間、それらは HEREDOC 終了トークンとしてではなく、 内の任意の文字列として登録されます。 HEREDOC は、より多くのコードブロックを消費します。

それが頭に浮かぶ唯一のことです-php -l <your functions.php>エラーはありませんでした(ただし、ENDHEADの前にスペースを追加すると、説明したエラーが発生しました)。

于 2010-05-05T15:51:42.830 に答える
0

私はあなたのためにコードを修正しました:

    <?php
include('inc/functions.php');

$type=$_GET['type'];
if($type == '') {
    $type = 'transfer';
}

$vidno = $_GET['vid'];
if($vidno == '') {
    $vidno = 1;
}

$vidindex = $vidno - 1;

$videos = get_vids($type);

$filename = $videos[$vidindex]['file'];
$title = $videos[$vidindex]['title'];
$basedir = "videos/$type";
$vidfile = "$basedir/$filename";

if($vidfile != '') {
    $extra = '<script src="/flowplayer/flowplayer-3.1.4.min.js"></script>';
    print_head($title, $extra);

    ?>
<p>
<a
    href='<?=$vidfile;?>'
    style="display:block;width:640px;height:498px;"
    id="player"
></a>
</p>

<p id="contlink" style="display:none">
<a href="done.php?type=<?=$type;?>&vid=<?=$vidno;?>">Click Here to continue</a>
</p>

<script language="JavaScript">
    flowplayer(
        "player",
        "/flowplayer/flowplayer-3.1.5.swf",
        {
            clip: {
                onFinish: function(){
                    //window.location = "done.php";
                    //alert('done!');
                    document.getElementById('contlink').style.display = "block";
                }
            },
            plugins: {
                controls: {
                    play:true,
                    volume:true,
                    mute:true,
                    time:true,
                    stop:true,
                    fullscreen:true,
                    scrubber:false
                }
            }
        }
    );
</script>
<?php

    print_foot();
} else {
    print_head('OOPS!');

?>
<h1>OOPS!</h1>
<p>
It looks like there's no video here.  <a onclick="history.go(-1);return false;" href="#">Go back</a> and try again.
</p>
<?php

    print_foot();
}
?>

上記のように、表示したいhtmlの周りのphpタグを開いたり閉じたりするだけです:)

それが役立つことを願っています

于 2010-05-05T15:50:40.760 に答える