Я не могу понять, почему этот PHP-скрипт дает мне 500 внутренних ошибок сервера.
$query = "SELECT video_id,title FROM video_id"; $videos = mysql_query($query); if($videos){ $videos = mysql_fetch_assoc($videos); foreach($videos as $video){ echo '<div class="video">'; echo '<a href="video.php?v="'.$video['video_id'].'"> <h3>"'.$video['title'].'"</h3></a>'; echo '</div>'; } }else{ echo "<p>No new videos actually</p>"; } mysql_close();
?>
Это код. Это похоже на любой другой простой сценарий, который я написал раньше. Наблюдая за журналом ошибок через cpanel, я увидел эту ошибку:
[Mon Oct 25 03:25:24 2010] [error] [client 80.181.111.60] SoftException in Application.cpp:256: File "/home/netatwor/public_html/cms/media/related.php" is writeable by group
Может кто-нибудь мне помочь?
Это ошибка, которую дает ваш веб-сервер (или интерфейс или модуль). Он проверяет permssions на файле /home/netatwor/public_html/cms/media/related.php
и он не позволяет ему запускаться, потому что он доступен для группы.
Чтобы исправить это, сделайте chmod gw-w /home/netatwor/public_html/cms/media/related.php
или эквивалент того, что вы используете для разрешения разрешений на вашем сайте.
Я не знаю, что такое Application.cpp, но ошибка, связанная с возможностью записи в группе, звучит как предупреждение о безопасности, что ваш php-файл имеет неправильные разрешения. Google для chmod
или uni-файлов.
Не связанный с вашей ошибкой, но я считаю, что ваш код испорчен на многих уровнях и не будет делать то, что, по вашему мнению, он делает. Позволь мне показать тебе:
$videos = mysql_fetch_assoc($videos); foreach($videos as $video){ echo '<div class="video">'; echo '<a href="video.php?v="'.$video['video_id'].'"> <h3>"'.$video['title'].'"</h3></a>'; echo '</div>'; }
Вы можете подумать, что код будет запускаться для каждого видео, которое возвращается запросом, но это не так. Вы на самом деле хотите увидеть одно видео, и все. Значение $ video внутри цикла foreach не будет массивом. Это будут индивидуальные значения в пределах одного массива видео.
Но есть еще:
if($videos){
Значение mysql_query является либо ложным, что означает, что была ошибка, либо ресурс, указывающий на нуль или более строк. Он не говорит вам, были ли возвращены строки или нет.
Вот как должен выглядеть ваш код:
$query = "SELECT video_id,title FROM video_id"; $videos = mysql_query($query); /** * There was an error if $videos is false. Use mysql_error() * to get a message explaining the error. */ if (!$videos) { die(mysql_error()); } /** * You use the function mysql_num_rows() to find out how many * rows were returned by the query. */ if(mysql_num_rows($videos) > 0) { /** * You need to keep calling mysql_fetch_assoc() until there are * no more rows to return. */ while($video = mysql_fetch_assoc($videos)) { echo '<div class="video">'; echo '<a href="video.php?v="'.$video['video_id'].'"> <h3>"'.$video['title'].'"</h3></a>'; echo '</div>'; } } else { echo "<p>No new videos actually</p>"; } mysql_close();