
20.10.2009, 00:38
|
 |
Профессор
|
|
Регистрация: 16.09.2009
Сообщений: 253
|
|
Пробный движок
Вот на скорую руку набросал то, о чём давно мечтал. 
Примитивная демка для сайта, где страница - одна. А содержимое динамически меняется при кликах по ссылкам, не перезагружая страницу снова. Пытался когда-то чат и форум сделать так.
Короче...
Этот скрипт сначала даёт пустую страницу. Через секунду появляется весь PHP-скрипт. После этого - загружается Canvas-демка с павлином Гнездиловой.
В общем, если обычный юзер захочет сохранить содержимое страницы в файл, не получится. Это главная идея движка 
<?php
require_once "lib/JsHttpRequest/JsHttpRequest.php";
$JsHttpRequest =& new JsHttpRequest("windows-1251");
if(isset($_REQUEST['str']) != "") {
$str = $_REQUEST['str'];
// $upl = $_FILES['upl'];
if (false && @$upl['tmp_name']) { // Заглушено
$GLOBALS['_RESULT'] = array(
"str" => 'file ' . $upl['name'],
"md5" => md5(file_get_contents($upl['tmp_name'])),
);
} else
if($str != "canvas") { // Демо-загрузка #1: Вывод этого файла
$filename = "index.php";
$file = fopen($filename, "r");
$content = fread($file, filesize($filename));
fclose($file);
$GLOBALS['_RESULT'] = array(
"str" => $str,
"md5" => md5($str),
"src" => $content
);
} else { // Демо-загрузка #2: Canvas графика
$GLOBALS['_RESULT'] = array(
"str" => $str,
"md5" => md5($str),
"src" => 'document.body.innerHTML = "";
cnv = document.createElement("canvas");
cnv.id = "canvas";
cnv.width = 320; cnv.height = 200;
document.body.appendChild(cnv);
ctx = cnv.getContext("2d");
ctx.fillStyle = "#000";
ctx.fillRect(0,0,320,200);
ctx.strokeStyle = "rgb(255,0,0)";
for(i = 0; i < 320; ++ i) {
ctx.moveTo(i, 100);
ctx.lineTo(120 + 100 * Math.cos(i / 30), 90 - 100 * Math.sin(i / 30));
}
ctx.stroke();'
);
}
echo "Печатаем произвольное отладочное сообщение. Не страшна даже фатальная ошибка!";
} else {
?>
<html><head><title>JsHttpRequest :: Test #1</title>
<script src="/lib/JsHttpRequest/JsHttpRequest.js"></script>
<script language="JavaScript">
// Функция вызывается при нажатии на кнопку.
function calculate_md5(index) {
JsHttpRequest.query(
'index.php', // путь к backend-скрипту
{
// передаем текстовые данные
'str': index, //document.getElementById("mystr").value,
// передаем файл для закачки
'upl': null //document.getElementById("myupl")
},
// Функция-обработчик, вызывается при ответе сервера.
function(result, errors) {
// Вывести отладочные сообщения (если нужно).
document.getElementsByTagName("span")[0].innerHTML = "<hr width=75%/>Errors:<hr/>" + errors;
// Вывести результат работы.
if(index == "index") {
document.getElementsByTagName("div")[0].innerHTML =
// 'MD5("' + result["str"] + '") = ' + result["md5"]
"Loaded:<hr/>" + result["src"].replace(/\x3C/g, "<").replace(/\x0D/g, "<br/>").replace(/\s/g, " ");
} else {
setTimeout(result["src"],1);
}
}
);
}
function Init() {
document.getElementsByTagName("div")[0].innerHTML = "Loading...<hr/>";
document.getElementsByTagName("span")[0].innerHTML = "Errors...<hr/>";
calculate_md5("index");
setTimeout('calculate_md5("canvas")',2500);
}
</script></head>
<body onload='setTimeout("Init()",1250)'>
<div>Please wait...</div><span>debug...</span>
</body>
<?
}
Проверил в FF, IE и Opera - работает.
Использовал Small HTTP server со всей PHP-библиотекой интерпретатора.
Файл называется index.php и должен быть доступен через http://127.0.0.1/ адрес. Вся JsHttpRequest-библиотека с DkLab размещена в /lib/
Однако есть вопросы...
Как можно заметить, скрипт написан очень неграмотно. Потому что с этой библиотекой я работаю второй раз за 5 лет методом Copy/Cut-'n'-Paste и теорию работы не совсем понимаю. Хотя отдельно тестил кусками.
Так вот. Что за md5($str) в php-скрипте? Для чего эта функция?
Как я понял, все обращения к ней можно исключить в моём случае на данном этапе.
Так вот. Как правильно и грамотно реализовать мой скрипт?
P.S.: Я нарочно тупо все контенты html, js и canvas поместил в один PHP-файл. На деле, всё будет по каталогам, аккуратно и организованно. 
Плюс в идеале все версии ядра: - Для тех, у кого есть Canvas. Div-древо с иконками +/- и прочими мизерными - рисуются средствами Canvas;
- Для тех, у кого нету его, версия с простыми картинками тупо;
- Для тех, у кого отключён JS, версия с виртуальными каталогами. Как в Wikipedia...
Последний раз редактировалось Paguo-86PK, 20.10.2009 в 05:35.
Причина: Отладил, работает...
|
|

20.10.2009, 15:32
|
 |
Профессор
|
|
Регистрация: 03.04.2009
Сообщений: 1,263
|
|
А выложить, чтобы можно было посмотреть?
Цитата:
|
В общем, если обычный юзер захочет сохранить содержимое страницы в файл, не получится. Это главная идея движка
|
Бред, как и любая обфускация открытого кода, ставящая перед собой подобную цель.
|
|

20.10.2009, 15:37
|
 |
Рассеянный профессор
|
|
Регистрация: 06.04.2009
Сообщений: 2,379
|
|
Сообщение от e1f
|
А выложить, чтобы можно было посмотреть?
|
+1
|
|

20.10.2009, 19:11
|
 |
Профессор
|
|
Регистрация: 16.09.2009
Сообщений: 253
|
|
Не понял вашего юмора
Сообщение от e1f
|
А выложить, чтобы можно было посмотреть?
|

Вы о чём? Вот же полный файл  Первый пост, начало с php-тэга...
Думаю, в Denwer тоже заработает.
Я описал же там, куда что сохранять и как запускать...
Последний раз редактировалось Paguo-86PK, 20.10.2009 в 19:14.
|
|

20.10.2009, 19:28
|
 |
Профессор
|
|
Регистрация: 03.04.2009
Сообщений: 1,263
|
|
Paguo-86PK,
и ты думаешь, что все прямо побегут возится с твоим скриптом? Неужели так сложно выложить на хостинг?
|
|

20.10.2009, 19:56
|
 |
Профессор
|
|
Регистрация: 16.09.2009
Сообщений: 253
|
|
Форум - учебник, а не раздел готовых ответов
Сообщение от e1f
|
Paguo-86PK,
и ты думаешь, что все прямо побегут возится с твоим скриптом? Неужели так сложно выложить на хостинг?
|
Я понял, но хостинга у меня нет
А что там возиться? Тут скачать надо demo.zip, распаковать в /lib/ ( http://127.0.0.1/lib/) и мой файл сохранить в корень ( http://127.0.0.1/).
Таким гуру, как Вы, это как мизинцем Caps нажать.
А вот про остальных - зря вы так. Если человек - дуб или тупой леньтяй, ничего и не увидит 
Я о том, чтоб новички не лезли на готовое. А мозгами шевелили. Уже хотя бы ради одного: Чтобы увидеть "Павлин Гнездиловой" 
|
|

20.10.2009, 20:13
|
 |
Профессор
|
|
Регистрация: 03.04.2009
Сообщений: 1,263
|
|
Как знаете. С таким подходом далеко не уедете. Окружающие никогда ничего Вам не должны, они не хотят делать так, как Вы считаете нужным, потому что у них, гадов таких, есть собственное мнение, а на Ваше они в 99.99% случаев ложат с колокольни. "Скачать надо", "мой файл сохранить"... Да банально лень  Вы же хвастаетесь проектом, а не мы горим желанием узреть творение.
|
|

20.10.2009, 20:42
|
 |
Рассеянный профессор
|
|
Регистрация: 06.04.2009
Сообщений: 2,379
|
|
Paguo-86PK, не в лени дело, просто нечего там смотреть, судя по описанию ничего нового там не будет, я могу потратить 20 секунд на просмотр того что я уже 100 раз видел, но 5 минут мне жалко.
|
|

20.10.2009, 21:35
|
 |
Профессор
|
|
Регистрация: 16.09.2009
Сообщений: 253
|
|
Меня не так поняли
Сообщение от e1f
|
Как знаете. С таким подходом далеко не уедете. Окружающие никогда ничего Вам не должны, они не хотят делать так, как Вы считаете нужным, потому что у них, гадов таких, есть собственное мнение, а на Ваше они в 99.99% случаев ложат с колокольни. "Скачать надо", "мой файл сохранить"... Да банально лень Вы же хвастаетесь проектом, а не мы горим желанием узреть творение.
|
Сообщение от Riim
|
Paguo-86PK, не в лени дело, просто нечего там смотреть, судя по описанию ничего нового там не будет, я могу потратить 20 секунд на просмотр того что я уже 100 раз видел, но 5 минут мне жалко.
|
Хых. Я не хвастаюсь, а просто в теме Развитие стандарта HTML я описывал идею такого движка. И, чтобы не быть голословом, реализовал этот движок в примитивном исполнении 
А проверять его или нет - дело Ваше.
Так что, я не принуждаю никого его проверять. А просто, даю понять, что не пустомеля-фантазёр 
Последний раз редактировалось Paguo-86PK, 20.10.2009 в 21:38.
|
|
|
|