Driver86 | Дата: Среда, 2012-03-14, 02:07:03 | Сообщение # 1 |
CyberMan
Сообщений: 545
Репутация: 14
Не на форуме
| С марта 2011 года в системе uCoz появилась возможность использовать PHP прямо у себя на сайте, без посторонних хостингов. Но есть некоторые нюансы при работе с PHP uCoz.
Данная функция платная и приобретается отдельно либо вместе с пакетом услуг. После оплаты для вашего сайта создается специальная учётная запись на отдельном сервере, на котором и происходит исполнение всех php-скриптов. Доступ к данной учетной записи, загрузка, изменение и удаление данных осуществляется по протоколу FTP, после оплаты в своей админке вы уведите следующее:
Адрес сервера, пароль и логин будут указаны в PHP-деталях.
PHP-скрипты необходимо загружать в папку /scripts на новом сервере, а файлы скриптов должны иметь расширение .php. Все остальные загруженные файлы не будут доступны через браузер. Таким образом, там можно хранить текстовой файл в качестве базы данных, рядом со скриптами, и не боятся, что кто-то их легко прочитает, узнав имя файла и введя его в адресной строке. Базы данных, вроде MySQL, отсутствуют на сервере uCoz. Поэтому под базы придётся использовать или решение, основанное на текстовых файлах, или отдельный хостинг с поддержкой MySQL и возможностью удалённо подключиться к ней.
Скрипт после загрузки будет доступен по адресу http://SITE_ADDRESS/php/SCRIPT_NAME.php, например: http://www.cybernova.net/php/test.php. Т.е., как видим, PHP работает на нашем сайте, хотя хостинг наш по прежнему тот же - uCoz.
Изменить путь до скрипта нельзя, но можно результат его работы отображать на любой странице модулей uCoz, вставляя следующий код в шаблон:
Code <?$PHPCODE$("http://SITE_ADDRESS/php/SCRIPT_NAME.php?param0=valueA&m1=valueB...&mN=valueZ")?>
где param0=valueA&m1=valueB...&mN=valueZ - это любые ваши пользовательсткие параметры, передаваемые скрипту SCRIPT_NAME.php методом GET. Есть, правда, небольшая особенность: результат будет вставляться не прямо в HTML, а через javascript, иначе говоря, вышеприведённый код замениться шаблонизатором uCoz на следующую конструкцию:
Code <div id="phpdiv"></div> <script type="text/javascript"> jQuery(document).ready(function(){ jQuery.ajax({ url: encodeURI("http://SITE_ADDRESS/php/SCRIPT_NAME.php?param0=valueA&m1=valueB...&mN=valueZ"), type: "GET", data: "", timeout: 20000, dataType: "jsonp", success: function(data){ if (data.SCRIPTDATA) $('#phpdiv').html(data.SCRIPTDATA); } }); }); </script>
Но не спешите разочаровываться: поисковики давно умеют выполнять javascript, а наш любимый Google прекрасно индексирует даже те сайты, которые построены на ajax.
Для того, что бы передать переменные из шаблона в скрипт, можно использовать следующую конструкцию:
Code <?$PHPCODE$("http://SITE_ADDRESS/php/SCRIPT_NAME.php?uid=",$USER_ID$)?>
В этом примере мы передаём скрипту ID пользователя, который заранее, естественно, знать не можем. Передавать можно любое кол-во переменных, перечисляя всё через запятую:
Code <?$PHPCODE$("http://SITE_ADDRESS/php/SCRIPT_NAME.php?uid=",$USER_ID$,"&pol=",$USER_GENDER_ID$,"&d=",$DAY$)?>
Т.е. всё, что идёт через запятую склеивается, при этом переменные, как обычно, заменяются на свои значения.
Если надо будет в шаблон вставить результат работы двух и более разных скриптов, то функцию $PHPCODE$()?> использовать нельзя. Для этого используйте следующий код:
Code <div id="uniq1"></div> <script type="text/javascript"> jQuery(document).ready(function(){ jQuery.ajax({ url: encodeURI("http://SITE_ADDRESS/php/SCRIPT_NAME1.php"), type: "GET", data: "", timeout: 20000, dataType: "jsonp", success: function(data){ if (data.SCRIPTDATA) $('#uniq1').html(data.SCRIPTDATA); } }); }); </script>
Вставляйте этот код в те места шаблона, где должен выводиться результаты работы скриптов, меняя http://SITE_ADDRESS/php/SCRIPT_NAME1.php на свой адрес скрипта, а uniq1 - на любое уникальное в рамках одной страницы значение. Последнее - важно, иначе скрипт будет работать некорректно. Пример:
Code <div>Последняя новость:</div> <div align="left"> <div id="uni01"></div> <script type="text/javascript"> jQuery(document).ready(function(){ jQuery.ajax({ url: encodeURI("http://www.cybernova.net/php/test1.php"), type: "GET", data: "", timeout: 20000, dataType: "jsonp", success: function(data){ if (data.SCRIPTDATA) $('#uniq1').html(data.SCRIPTDATA); } }); }); </script> </div>
<div>Последняя запись на форуме:</div>
<div align="left"> <div id="uni02"></div> <script type="text/javascript"> jQuery(document).ready(function(){ jQuery.ajax({ url: encodeURI("http://www.cybernova.net/php/test2.php"), type: "GET", data: "", timeout: 20000, dataType: "jsonp", success: function(data){ if (data.SCRIPTDATA) $('#uniq1').html(data.SCRIPTDATA); } }); }); </script> </div>
Кстати об адресах скриптов: можно создавать подпапки в папке /scripts, например создадим папку papka и загрузим в неё наш файл test.php, вот что у нас получилось: http://www.cybernova.net/php/test.php
Вы, наверное, заметили, что результат выводится странноватым:
Code ({"SCRIPTDATA":"ok","ERROR":""})
А вот что в коде файла test.php
Т.е., казалось бы, должно выводиться на экран только 'ok' и всё, без "SCRIPTDATA","ERROR" и т.п. А всё дело в том, что по-умолчанию PHP uCoz выводит результат в формате json. А если вы будете использовать результат работы скрипта по-своему, а не через функцию $PHPCODE$()?>, то обязательно запретите скрипту выводить значения в json с помощью установки переменной $___notjson:
Code <?php
$___notjson = 1; echo 'ok';
?>
Вот теперь этот скрипт выведет на экран браузера именно то, что и выводит, т.е. 'ok'.
На момент написания этой статьи характеристики сервера и PHP были следующими: - PHP Version 5.2.12
- System Linux s2000.ucoz.net 2.6.32.22 #1 SMP Fri Sep 24 17:24:27 MSD 2010 x86_64
- Server API CGI/FastCGI
- allow_url_fopen On
- magic_quotes_gpc On
- max_execution_time 25
- memory_limit 313572800
- upload_max_filesize 2M
- Следующие функции запрещены:
popen, pclose, stream_copy_to_stream, dio_close, dio_fcntl, dio_open, dio_read, dio_seek, dio_stat, dio_tcsetattr, dio_truncate, dio_write, exec, passthru, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec, system, expect_expectl, expect_popen, pcntl_alarm, pcntl_exec, pcntl_fork, pcntl_getpriority, pcntl_setpriority, pcntl_signal_dispatch, pcntl_signal, pcntl_sigprocmask, pcntl_sigtimedwait, pcntl_sigwaitinfo, pcntl_wait, pcntl_waitpid, pcntl_wexitstatus, pcntl_wifexited, pcntl_wifsignaled, pcntl_wifstopped, pcntl_wstopsig, pcntl_wtermsig, posix_access, posix_ctermid, posix_errno, posix_get_last_error, posix_getcwd, posix_getegid, posix_geteuid, posix_getgid, posix_getgrgid, posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, posix_getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit, posix_getsid, posix_getuid, posix_initgroups, posix_isatty, posix_kill, posix_mkfifo, posix_mknod, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_strerror, posix_times, posix_ttyname, posix_uname, ftok, msg_get_queue, msg_queue_exists, msg_receive, msg_remove_queue, msg_send, msg_set_queue, msg_stat_queue, sem_acquire, sem_get, sem_release, sem_remove, shm_attach, shm_detach, shm_get_var, shm_has_var, shm_put_var, shm_remove_var, shm_remove, shmop_close, shmop_delete, shmop_open, shmop_read, shmop_size, shmop_write, apache_child_terminate, apache_get_modules, apache_get_version, apache_getenv, apache_lookup_uri, apache_note, apache_request_headers, apache_reset_timeout, apache_response_headers, apache_setenv, getallheaders, virtual, nsapi_request_headers, nsapi_response_headers, nsapi_virtual, mail, mysql_stat, mysql_pconnect.
|
|
| |