-1

私は自分のコードが乱雑であることを知っています。私はこれに非常に慣れておらず、学習しながら学んでいます。

私のサイトは次のとおりです: http://itsalllegit.com (現在、自宅のコンピューターから実行されており、tvdb API を使用しているため、少し遅い場合があります)。

そのほとんどは機能しているように見えますが、現在のところ、ここに示すように機能しないのは NCIS だけです: http://itsalllegit.com/season.php?sid=72108&season=1 .

私はそれが悪くて長いことを知っていますが、これが私のコードです...私はこれに固執しており、助けていただければ幸いです(一般的にそれを改善するためのヒントもそうです)。

ところで...私echo $url3が思いついたら"(*#YR&(^#R(@$#%$&^@#%$*@#%$&^@$#&"など。

    <html>
    <head>
        <title>Saars - Homepage</title>
            <link rel="stylesheet" type="text/css" href="default.css" />
    </head> 
        <body>
            <?php

                $series_id = $_GET["sid"];
                $season_number = $_GET["season"];
                $local_path = "images/Banner/".$series_id."-Banner.jpg";
                $url1 = file_get_contents("http://thetvdb.com/api/E676DF9578EF38D7/series/".urlencode($series_id));
                $xml = simplexml_load_string($url1);
                $series_name = $xml->Series[0]->SeriesName;
                $series_rating = $xml->Series[0]->Rating;
                $series_network = $xml->Series[0]->Network;
                $series_status = $xml->Series[0]->Status;
                    echo '<img src="'.$local_path.'"><br />';
                    echo "Name: ".$series_name."<br />";
                    echo "Rating: ".$series_rating."<br />";
                    echo "Network: ".$series_network."<br />";
                    echo "Status: ".$series_status."<br />";
                    echo "<hr />";
                        echo '<table bgcolor="#000000">';
                            echo '<tr>';
                                echo '<td width="30">';
                                    echo '<font color="white">#</font>';
                                echo '</td>';
                                echo '<td width="500">';
                                    echo '<font color="white">Episode Name</font>';
                                echo "</td>\n";
                                echo '<td width="100">';
                                    echo '<font color="white">First Aired</font>';
                                echo "</td>\n";
                            echo "</tr>\n";
                        echo "</table>";
                for ($episode_number = 1; $episode_number <= 200; $episode_number++) {
                    $url2 = "http://thetvdb.com/api/E676DF9578EF38D7/series/".$series_id."/default/".urlencode($season_number)."/".urlencode($episode_number)."/en.xml";
                    $handle = @fopen($url2, 'r');
                    if ($handle === false) {
                        return;
                    } else {
                        $url3 = file_get_contents("http://thetvdb.com/api/E676DF9578EF38D7/series/".$series_id."/default/".urlencode($season_number)."/".urlencode($episode_number)."/en.xml");
                        $xml = simplexml_load_string($url3);
                        $episode_name = $xml->Episode[0]->EpisodeName;
                        $episode_rating = $xml->Episode[0]->Rating;
                        $episode_firstaired = $xml->Episode[0]->FirstAired;
                        $episode_overview = $xml->Episode[0]->Overview;
                        $column1 = '<a href="episode.php?sid='.$series_id.'&season='.$season_number.'&episode='.$episode_number.'">'.$episode_number.'</a>';
                        $column2 = '<a href="episode.php?sid='.$series_id.'&season='.$season_number.'&episode='.$episode_number.'">'.$episode_name.'</a>';
                        $column3 = '<a href="episode.php?sid='.$series_id.'&season='.$season_number.'&episode='.$episode_number.'">'.$episode_firstaired.'</a>';
                            echo '<table>';
                                echo "<tr>\n";
                                    echo '<td width="30">';
                                        echo $column1;
                                    echo "</td>\n";
                                    echo '<td width="500">';
                                        echo $column2;
                                    echo "</td>\n";
                                    echo '<td width="100">';
                                        echo $column3;
                                    echo "</td>\n";
                                echo "</tr>\n";
                            echo "</table>";
                    fclose($handle);
                    }
                }
                ?>
        </Body>
    </html>
4

1 に答える 1

0

各 URL を 2 回開いていますが、データを読み取るのは 1 回だけです。サーバーは、この動作をスラミングとして拒否し、しばらくすると 2 番目の接続を拒否する場合があります。ループの内容を次のように変更してみてください。

// Define the URL
$url2 = "http://thetvdb.com/api/E676DF9578EF38D7/series/$series_id/default/".urlencode($season_number)."/".urlencode($episode_number)."/en.xml";

// Try and fetch the XML
// You are returning a value - are you in a function? Should you maybe break; instead?
if (!$xmlStr = file_get_contents($url2)) return FALSE;
if (!$xml = simplexml_load_string($xmlStr)) return FALSE;

// Get data
$episode_name = $xml->Episode[0]->EpisodeName;
$episode_rating = $xml->Episode[0]->Rating;
$episode_firstaired = $xml->Episode[0]->FirstAired;
$episode_overview = $xml->Episode[0]->Overview;

// Output HTML
// A single-row table per record? Maybe you should have one table with multiple rows?
$epURL = htmlspecialchars("episode.php?sid=$series_id&season=$season_number&episode=$episode_number");
echo "
<table>
  <tr>
    <td width='30'><a href='$epURL'>$episode_number</a></td>
    <td width='500'><a href='$epURL'>$episode_name</a></td>
    <td width='100'><a href='$epURL'>$episode_firstaired</a></td>
  </tr>
</table>";

それでもうまくいかない場合$url2は、ループをエコーアウトして、エラーが発生したときに何が含まれているかを確認してください。

于 2012-04-12T11:49:30.440 に答える