Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Посоветуйте что-нить улучшить в скрипте, опытный взгляд так сказать нужен :) 
:(
    Опции темы
Ciber SLasH
  Дата 20.6.2005, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: 3
Всего: 67



Есть 2-а php-скрпта.
index.php -- здесь есть в левой стороне форма для ввода текста. Чтобы скрипт работал нужно всего навсего поменять имя картинки, которое стоит после слова "open" -- Let's open cool picture, X=180, Y=50, т.е. по умолчанию после слова "open" стоит "cool"... вот его и надо менять на имя картинки из списка. Если введённое имя существует среди картинок, то выводится эта картинка.
Это что-то на подобии анализатора текста, т.е. если в тексте встречается ключевое слово, то нужно выполнять какие-либо действия.

Проблема в этом скрипте (дизайнерская): я так и не смог сделать так, чтобы при загрузке большого рисунка слой в который он загружается не двигался вместе с документом, т.е. появляется скролл и он крутит весь документ, а не как задумывалось -- только слой.

pictures.php -- при загрузки новой картинки, файл отправляется на обработку этому скрипту и он просматривает всю папку с картинками и собирает имена файлов-картинок, а потом выводит их в index.php. Также в его задачу входит генерация JavaScript'а, в котором будет обновлён массив с картинками для того, чтобы index.php знал и мог обратиться к новым картинкам.

Я в PHP всего 2-3 дня, т.ч. хочется услышать критику кода, чтобы в дальнейшем не наступать на те же самые грабли (да ещё если не знаешь что лучше, тот или иной подход).

Скажу сразу: скрипт не мой -- это мне препод дал доработать его, т.ч. не судите меня я и так его запарился вычищать от ошибок (было просто громадное число ошибок: не закрытые тэги, например не были закрыты ни </head>, ни </body>, ни </html> -- короче препод не шибко любит хорошо-читаемый красивый безглючный код).

index.php я практически весь переработал от "неправильного" кода, а вот в pictures.php -- 90% не переделано. После 54-строки я не стал его вычищать (запарило).

Вот собсна и скрипты:

index.php:
Код

<?
################################################################################
##[ Отключение кэширования ]####################################################
################################################################################
header('Expires: Mon, 13 Feb 1983 05:00:00 GMT');  // дата в прошлом
// Контент всегда модифицируется
header('Last-Modified: ' . gmdate("D, d M Y H:i:s") . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');  // HTTP/1.1
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');  // HTTP/1.0
################################################################################
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content='text/html; charset=windows-1251'>
<meta http-equiv="Cache-Control" content='no-cache'>
<meta http-equiv="Pragma" content='no-cache'>
<meta http-equiv="Expires" content='0'>
<title>Образовательный портал, математика и программирование</title>
<script type='text/javascript' src='phpgen.js'></script>
<script type='text/javascript'>
function initpics() {
  if (typeof(MyPics) == 'undefined') {
    MyPics = new Array();
    MyPics[0] = 3;
    MyPics[1] = new Image();
    MyPics[1].src = 'img/man.gif';
    MyPics[1].alt = 'man';
    MyPics[2] = new Image();
    MyPics[2].src = 'img/sun.gif';
    MyPics[2].alt = 'sun';
    MyPics[3] = new Image();
    MyPics[3].src = 'img/cool.gif';
    MyPics[3].alt = 'cool';
    //alert('initpics :: \n\ntypeof(MyPics) = '+typeof(MyPics));
  }
  else {
    MyPics[0] = 0;
    for (var i = 1; i <= pics[0]; i++) {
      MyPics[i] = new Image();
      MyPics[i].src = pics[i];
      MyPics[i].alt = namepics[i];
    }
    MyPics[0] = pics[0];
    //alert('initpics :: \n\n'+'namepics = '+namepics);
  }
}

function dialog(obj) {
var X,Y;
var text = obj.textin.value;
var textArray = text.split(",");
var i;

  if (textArray[0].indexOf('open') > -1) {
    try {
      i = textArray[1].indexOf('=');
      X = textArray[1].substr(i+1);
      i = textArray[2].indexOf('=');
      Y = textArray[2].substr(i+1);
    }
    catch (e) {
      alert('Произошла ошибка! В строках: [55-58]');
      return;
    }
    for (i = 1; i <= MyPics[0]; i++)
      if (text.indexOf(MyPics[i].alt) > -1) {
        text = 'open "'+MyPics[i].alt+'" X='+X+'; Y='+Y;
        obj.textout.value = text;
        document.getElementById('forImg').innerHTML = '<img src="'+MyPics[i].src+'" style="position: absolute; left: '+X+'; top: '+Y+'"'+' alt="'+MyPics[i].alt+'">';
        //alert('Yes:\n\nMyPics['+i+']:\n src = '+MyPics[i].src+'\n alt = '+MyPics[i].alt+'\nMyPics[0] = '+MyPics[0])
        break;
      }
     // else alert('No:\n\nMyPics['+i+']:\n src = '+MyPics[i].src+'\n alt = '+MyPics[i].alt+'\nMyPics[0] = '+MyPics[0]+'\npics[0] = '+pics[0]);
  }
}

function addtext(obj) {
var selNum = obj.textselector.selectedIndex;
var selText = obj.textselector.options[selNum].text;
  obj.textin.value = selText;
  document.form1.textin.focus();
}
</script>
<style type='text/css'>
/*a {color: white}*/
img {border-width: 0}
</style>
</head>

<body>
<table width="100%" height="100%" cellspacing="0" cellpadding="0" align="center">
<tr valign="top"><td width="42%">

    <!-- Левая сторона -->
    <table width="98%" cellSpacing="0" cellPadding="8" bgColor="#F1E7E4">
    <tbody>
    <tr><td borderColor="#EEAA00"><!-- поля для ввода -->
        <form name="form1" onSubmit="return false">
        <input type="button" value="Анализ текста" onClick="dialog(form1)">
        <select name="textselector" onChange="addtext(form1)">
        <option>Text</option>
        <option>Let's open man picture, X=180, Y=50</option>
        <option>Let's open sun picture, X=180, Y=50</option>
        <option>Let's open cool picture, X=180, Y=50</option>
        </select>
        <p>
            <textarea align="center" name="textin" rows="5" style='width: 100%'>Let's open cool picture, X=180, Y=50</textarea><br>
            <textarea align="center" name="textout" rows="5" style='width: 100%'></textarea>
        </p>
        </form>
        <script type='text/javascript'>
        initpics();
        document.form1.textin.focus();
        </script>
    </td></tr>
    <tr><td>
    <!-- Слой для вставки картинок -->
    <div id='forImg' style='position: relative'></div>
    </td></tr>
    </tbody>
    </table>

    </td>
    <td>

    <!-- Правая сторона -->
    <table width="100%" height="100%" cellspacing="0" cellpadding="0">
    <tr><td height="5%" valign="top"><!-- шапка со счётчиком -->
        <hr>
        <div style='background-color: #EEEEEE'>&nbsp;&nbsp;CE&nbsp;&nbsp;Буфер рисунков...&nbsp;&nbsp;Visited:
        <?
        $counterval = 0;
        $fp = fopen("loganalysis.txt", "r");
        $counterval = fread($fp, 26 );
        fclose($fp);
        $counterval = (integer)$counterval + 1;
        $fp = fopen("loganalysis.txt", "w+");
        fwrite($fp, $counterval, 26);
        fclose($fp);
        print "$counterval";
        ?>
        </div>
        <hr>
    </td></tr>
    <tr><td height="8%" align="center" valign="middle" bgcolor="#AADDFF">
        <!-- Форма загрузки картинок на сервер -->
        <form action='pictures.php' method="POST" enctype="multipart/form-data" style='margin: 0'>
        <input type="file" name="File">&nbsp;
        <input type="submit" name="doUpload" value="Upload">
        </form>
    </td></tr>
    <tr><td><!-- слой с показываемыми картинками -->
    <div align="center" style='width: 100%; height: 100%; '><? include('pictures.php'); ?></div>
    </td></tr>
    </table>

</td></tr>
<!-- Слой с копирайтами -->
<tr><td height="5%" colspan="2" align="center" valign="bottom" style='font: bold 10pt serif'>
V&nbsp;M&nbsp;A&nbsp;T&nbsp;L&nbsp;A&nbsp;B<br>
<span class="copyright">© 2005 Общеобразовательный портал</span>
</td></tr>
</table>
</body>
</html>

pictures.php:
Код

<?
$ImgDir = "img";
@mkdir($ImgDir,0755);

if (@$_POST['doUpload'] && @file_exists($_FILES['File']['tmp_name']))
  Copy($_FILES['File']['tmp_name'], "$ImgDir/".$_FILES['File']['name']);

$d = opendir($ImgDir);
$Photos = array();

while (($e = readdir($d)) !== false) {
  if (!ereg("^(.*)\\.(gif|GIF|jpg|JPG|png|PNG|zip|ZIP|doc|DOC|txt|TXT)$",$e,$P)) continue;
  $path = "$ImgDir/$e";
  $sz = GetImageSize($path);
  $Photos[] = array('time' => filemtime($path),  'name' => $e,  'url' => $path,
                    'w' => $sz[0],  'h' => $sz[1],  'wh' => $sz[3]);
}
krsort($Photos);

$ServerUrl = 'http://'.$HTTP_SERVER_VARS['SERVER_NAME'].$HTTP_SERVER_VARS['PHP_SELF'];
$ServerUrl = substr($ServerUrl, 0, strrpos($ServerUrl, '/')).'/';

foreach ($Photos as $value)
  foreach ($value as $key => $val)
    if ($key == 'name')  $ImgAName[] = '"' . substr($val, 0, strpos($val, '.')) . '"';
    elseif ($key == 'url')  $ImgAUrl[] = '"' . $ServerUrl . $val . '"';

$ImgANameImp = implode(',', $ImgAName);
$ImgAUrlImp = implode(',', $ImgAUrl);

$fhandle = fopen('phpgen.js', 'w');

$JSContent  = "pics = [" . count($ImgAUrl) . "," . $ImgAUrlImp . "];\n";
$JSContent .= "namepics = [" . count($ImgAName) . "," .  $ImgANameImp . "];\n";
$JSContent .= "MyPics = [];\n";

fwrite($fhandle, $JSContent);
fclose($fhandle);

if (isset($_POST['doUpload'])) {
################################################################################
##[ Отключение кэширования ]####################################################
################################################################################
header('Expires: Mon, 13 Feb 1983 05:00:00 GMT');  // дата в прошлом
// Контент всегда модифицируется
header('Last-Modified: ' . gmdate("D, d M Y H:i:s") . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');  // HTTP/1.1
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');  // HTTP/1.0
################################################################################
  header('Location: index.php');  // перенаправление на главную (для обновления картинок)
  exit;
}
################################################################################
$counter = 0;
$counter2 = 0;
echo '<table width="300">';
foreach ($Photos as $n => $Img) {
  $icon = 1;
  $extens = explode(".", $Img['url']);
  switch ($extens[count($extens)-1]) {
    case 'zip':  $icon=2;  break;
    case 'ZIP':  $icon=2;  break;
    case 'rar':  $icon=2;  break;
    case 'RAR':  $icon=2;  break;
    case 'doc':  $icon=3;  break;
    case 'DOC':  $icon=3;  break;
    case 'txt':  $icon=3;  break;
    case 'TXT':  $icon=3;  break;
  }

  if ($counter2 == 0)  echo '<tr>';
  echo '<td><center>';
  $extens = explode("/", $Img['url']);

  if ($counter >= 6) {
    if ($counter == 6)  echo '<P>';
    if ($icon == 1)
      echo '<a href="'.$Img['url'].'" target="_blank"><img src="disk.jpg" hspace="1" vspace="5"></a>';
    else
      if ($icon == 3)
        echo '<a href="'.$Img['url'].'" target="_blank"><img src="disk.jpg" hspace="1" vspace="5"><br><center>'.$extens[count($extens)-1].'</a>';
      else
        echo '<a href="'.$Img['url'].'" target="_blank"><img src="zip.gif" height="22" width="22" hspace="1" vspace="5"><br>'.$extens[count($extens)-1].'</a>';
  }
  else {
    $img_params = getimagesize($Img['url']);
    $height = ($img_params[1] > 280) ? 280 : $img_params[1];
    if ($icon == 1)
      echo '<a href="'.$Img['url'].'" target="_blank"><img src='.$Img['url'].' height='.$height.' hspace="1" vspace="5"><br><center>'.$extens[count($extens)-1].'</a>';
    else
      if ($icon==3)
        echo '<a href="'.$Img['url'].'" target="_blank"><img src="disk.jpg" hspace="1" vspace="5"><br><center>'.$extens[count($extens)-1].'</a>';
      else
        echo '<a href="'.$Img['url'].'" target="_blank"><img src="zip.gif" height="22" width="22" hspace="1" vspace="5"><br><center>'.$extens[count($extens)-1].'</a>';
  }
  $counter++;
  $counter2++;
  echo '</td>';
  if ($counter2 == 3) {
    echo '</tr>';
    $counter2 = 0;
  }
}
echo '</table>';
?>


Это сообщение отредактировал(а) Ciber SLasH - 20.6.2005, 00:49

Присоединённый файл ( Кол-во скачиваний: 0 )
Присоединённый файл  temp.zip 4,53 Kb
PM   Вверх
Ciber SLasH
Дата 20.6.2005, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: 3
Всего: 67



Кстати ещё вопрос: а как передать из php-скрипта, массивы JavaScript'у в главную страницу, в которой есть IFRAME ? Т.е. нужно обновлять массив в JavaScript'е на главной странице.
PM   Вверх
Black
Дата 20.6.2005, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: 7
Всего: 45



Ciber SLasH
Цитата
Т.е. нужно обновлять массив в JavaScript'е на главной странице.

наоборот, JavaScript должен получать данные от PHP.

Вот тут я уже писал как это делать:

http://forum.vingrad.ru/index.php?showtopic=56018



--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0520 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.