PHP: "beklenmeyen $ end"

2 Cevap php

Ben bu sayfayı (video.php) çalıştırmayı denediğinizde, aşağıdaki hatayı alıyorum:

Ayrıştırma hatası: 37 hattı üzerine sözdizimi hatası, beklenmedik $ end / baz / yol / maskeli / inc / functions.php

Garip bir şey "functions.php" fazla 37 satır ... neden orada bir dosya sonu algıladığını vardır? Her fonksiyon, uzun tek bir deyim (bir yazdırma deyimi) olduğundan ben think herhangi Pars ya da parantez eksik yok.

Ben sorunu denemek ve çözmek için birçok şey yaptık. Ben de print_head () ve print_foot () için işlev tanımında ifadeleri kaldırırsanız, hata (sayfanın geri kalanı gayet iyi çalışıyor) uzağa gider. Ben işlevlerden birini birinde ifadeleri kaldırırsanız, ben sadece farklı bir çizgi üzerinde, aynı hatayı alıyorum. Ben sayfada etrafında fonksiyon tanımları taşırsanız, ben aynı hatayı alıyorum. Ben bile baskı açıklamada parçalarını kaldırarak denedim, ama hala aynı hatayı alıyorum.

EDIT:
'video / transfer / playlist' is an example file that get_vids() loads. It's a flat txt file with an even number of lines; odd lines are the name of a video file, and even lines are the title that go with the preceding file. I've tested to make sure get_vids() works as expected.

EDIT:
Here's what I get when I try to run everything from the command line:

$ 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

İşte benim kod:

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 (nerede think sorundur):

<?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;
}
?>

video / transfer / playlist

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?

2 Cevap

Bu kendi başına, bir sonu dosyası tespit, ama değil kod yürütülebilir hatları mantıksal bir sonu.

the moment they're not the first token on the line, they don't register as HEREDOC end tokens but as an arbitrary string within, böylece heredoc codeblock daha yiyor - önlerinde hiçbir boşluk var ;) ve ENDFOOT; sizin heredoc sonu belirteçleri (ENDHEAD emin olun.

php -l <your functions.php> Bana hiçbir hata netleştirilmiştir (; bana anlatılan hata verdi ama ENDHEAD önce bir boşluk ekleyerek) - akla gelen tek şey bu.

Senin için kodunu çözdüm:

    <?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();
}
?>

Yukarıda gördüğünüz gibi :) - Sen görüntülemek istediğiniz html etrafında php etiketleri sadece açık ve kapatabilirsiniz

Umut olur