Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Глобальные переменные

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: помогите чайнику разобраться ...
dmitry
Отправлено: 17 Декабря, 2011 - 17:28:20
Post Id


Новичок


Покинул форум
Сообщений всего: 27
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Что то не получается разобраться с глобальными переменными. Может где то не правильно? Пишу:

PHP:
скопировать код в буфер обмена
  1.  
  2. global $test;
  3.  
  4. if(empty($test))
  5. {
  6. $test = 'qwe';
  7. }
  8.  


Так вот сколько не вызывается php файл постоянно $test пустой ... Что не правильно делаю?
Не сочтите за труд, подскажите начинающему пхп программисту.

Спасибо.
 
 Top
etoYA
Отправлено: 17 Декабря, 2011 - 17:30:48
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




Вроде все нормально
 
 Top
Данил_123
Отправлено: 17 Декабря, 2011 - 17:30:58
Post Id


Участник


Покинул форум
Сообщений всего: 1026
Дата рег-ции: Июнь 2011  
Откуда: rostov


Помог: 9 раз(а)




dmitry может весь код, так как ели это не в теле функции или класса, то global не обязателен


-----
http://mysitecost.ru
 
 Top
caballero
Отправлено: 17 Декабря, 2011 - 17:32:37
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Во первыъх испольхзование глобальных переменных есть моветон
во вторых где ты ее инициализируешь вообще


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
DlTA
Отправлено: 17 Декабря, 2011 - 17:33:28
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




а разве $test где то объявлена?
 
 Top
Данил_123
Отправлено: 17 Декабря, 2011 - 17:39:11
Post Id


Участник


Покинул форум
Сообщений всего: 1026
Дата рег-ции: Июнь 2011  
Откуда: rostov


Помог: 9 раз(а)




dmitry нус.. Весь код в студию, это в функции или в классе.. если нет, то зачем данный префикс


-----
http://mysitecost.ru
 
 Top
dmitry
Отправлено: 17 Декабря, 2011 - 17:39:25
Post Id


Новичок


Покинул форум
Сообщений всего: 27
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Данил_123 пишет:
dmitry может весь код, так как ели это не в теле функции или класса, то global не обязателен


Я бы с удовольствием выложил весь код, там 20 строк, НО у меня эти 20 строк уже всю плешь проели.
То функция не срабатывает, то глобальная переменная пустая ...
Может у меня какой то косяк на серваке в пхп?
Такое может быть?

Вся предыстория ... У меня есть сайт(ы) на вордпресе ... их ломают "как из пулемета", я (вычитал на каком то форуме о плагине по безопасности) сделал расширенный плагин по безопасности ... 20 строк кода.
Сначала он работал отлично, сейчас чего то перестал работать ... я уже сервак перезагрузил, httpd тоже перезапускал, не работает "негодник", не знаю что и думать ... уже выбился из сил ...

Конкретно по плагину, наверное можно будет новую тему создать, если людям будет интересно.

А вот по глобальной переменной другой вопрос. Эта переменная содержит одно значение для всех посетителей или для каждого посетителя свое значение может быть?
 
 Top
Данил_123
Отправлено: 17 Декабря, 2011 - 17:42:53
Post Id


Участник


Покинул форум
Сообщений всего: 1026
Дата рег-ции: Июнь 2011  
Откуда: rostov


Помог: 9 раз(а)




dmitry вы думаете,то что вы там написали мы не знаем.. Я угадал это в теле функции, тогда global тут не помощник, гоу код.. - return знаете? - а мы напишем..

(Отредактировано автором: 17 Декабря, 2011 - 17:44:15)



-----
http://mysitecost.ru
 
 Top
dmitry
Отправлено: 17 Декабря, 2011 - 17:50:22
Post Id


Новичок


Покинул форум
Сообщений всего: 27
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Данил_123 пишет:
dmitry вы думаете,то что вы там написали мы не знаем.. Я угадал это в теле функции, тогда global тут не помощник, гоу код.. - return знаете? - а мы напишем..


тока сразу предупреждаю, не смейтесь над моей писаниной, я всю жизь на Сях писал, для меня этот пхп как мозаляка ...
Хотел привинтить сюда не чтение из файла, а хранение данных в глобальной переменной.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. /*
  4. Plugin Name: QSP.
  5. Plugin URI: midisa.com
  6. Description: От всяких плохих запросов.
  7. Author URI: http://midisa.com
  8. Author: Dmitry Kruglov
  9. Version: 2.5
  10. */
  11.  
  12. //global $user_ID;
  13.  
  14. if ($_SERVER['HTTP_HOST'] == '178.74.67.84')
  15. {
  16.         header('Location: http://elvish.biz');
  17.         @exit;
  18. }
  19.  
  20. $target_dir = ABSPATH.'/wp-content/elv';
  21.  
  22. if (file_exists($target_dir."/list_hack.txt"))
  23. {
  24.         $list_hack = file_get_contents($target_dir."/list_hack.txt");
  25.         if (strpos($list_hack,$_SERVER['REMOTE_ADDR']."\t".date("Y") ."-". date("m")."-". date("d")) !== false)
  26.         {
  27.                 @header("HTTP/1.1 414 Request-URI Too Long");
  28.                 @header("Status: 414 Request-URI Too Long");
  29.                 @header("Connection: Close");
  30.                 @exit;
  31.                 // Не пускаем на сайт хакеров в течении текущего дня.
  32.         }
  33. }
  34.  
  35.  
  36. if(strpos($_SERVER['REQUEST_URI'],'/wp-admin/') === FALSE && strpos($_SERVER['REQUEST_URI'],'/wp-login.php') === FALSE  && strpos($_SERVER['REQUEST_URI'],'/wp-login/') === FALSE)
  37. {
  38.         if(strlen($_SERVER['REQUEST_URI']) > 240)
  39.         {
  40.                 @header("HTTP/1.1 414 Request-URI Too Long");
  41.                 @header("Status: 414 Request-URI Too Long");
  42.                 @header("Connection: Close");
  43.                 @exit;
  44.                 // Ограничеваем длинну запроса до 240 символов
  45.         }
  46.         /*  strlen($_GET['s']) == 0 */
  47.         if (strpos($_SERVER['REQUEST_URI'], "%3F") !== FALSE && empty($_GET['s']))
  48.         {
  49.                 $target_dir = ABSPATH.'/wp-content/elv';
  50.                 if(!is_dir("$target_dir"))
  51.                 {
  52.                         mkdir("$target_dir", 0755);
  53.                 }
  54.                 file_put_contents($target_dir."/list_hack.txt",$_SERVER['REMOTE_ADDR']."\t".date("Y") ."-". date("m")."-". date("d")."\t". $_SERVER['REQUEST_URI'] ."\n",FILE_APPEND);
  55.                 @header("HTTP/1.1 414 Request-URI Too Long");
  56.                 @header("Status: 414 Request-URI Too Long");
  57.                 @header("Connection: Close");
  58.                 @exit;
  59.                 // Запрещаем использовать в запросе скрипты пхп и шелл
  60.         }
  61.         if(strpos($_SERVER['QUERY_STRING'],'.php') !== FALSE || strpos($_SERVER['QUERY_STRING'],'.sh') !== FALSE)
  62.         {
  63.  
  64.                 $target_dir = ABSPATH.'/wp-content/elv';
  65.                 if(!is_dir("$target_dir"))
  66.                 {
  67.                         mkdir("$target_dir", 0755);
  68.                 }
  69.                 file_put_contents($target_dir."/list_hack.txt",$_SERVER['REMOTE_ADDR']."\t".date("Y") ."-". date("m")."-". date("d")."\t". $_SERVER['REQUEST_URI'] ."\n",FILE_APPEND);
  70.                 @header("HTTP/1.1 414 Request-URI Too Long");
  71.                 @header("Status: 414 Request-URI Too Long");
  72.                 @header("Connection: Close");
  73.                 @exit;
  74.                 // Запрещаем использовать в запросе скрипты пхп и шелл
  75.         }
  76.  
  77. }
  78.  
  79. if(strlen($_GET['s']) > 30)
  80. {
  81.         header('Location:'. "http://".$_SERVER['HTTP_HOST']);
  82.         @exit;
  83. }
  84.  
  85. if (strpos($_SERVER['REQUEST_URI'], "siteSlide.php"))
  86. {
  87.         $target_dir = ABSPATH.'/wp-content/elv';
  88.         if(!is_dir("$target_dir"))
  89.         {
  90.                 mkdir("$target_dir", 0755);
  91.         }
  92.         file_put_contents($target_dir."/test.txt",$_SERVER['REMOTE_ADDR']."\t".date("Y") ."-". date("m")."-". date("d")."\t". $_SERVER['REQUEST_URI'] ."\n",FILE_APPEND);
  93.         // Проверяем запуск зловредных программ
  94. }
  95.  
  96. if (strpos($_SERVER['REQUEST_URI'], "eval(") ||      
  97.   strpos($_SERVER['REQUEST_URI'], "CONCAT") ||
  98.   strpos($_SERVER['REQUEST_URI'], "UNION+SELECT") ||
  99.   strpos($_SERVER['REQUEST_URI'], "base64"))
  100. {
  101.         $target_dir = ABSPATH.'/wp-content/elv';       
  102.         if(!is_dir("$target_dir"))
  103.         {
  104.                 mkdir("$target_dir", 0755);
  105.         }
  106.         file_put_contents($target_dir."/list_hack.txt",$_SERVER['REMOTE_ADDR']."\t".date("Y") ."-". date("m")."-". date("d")."\t". $_SERVER['REQUEST_URI'] ."\t". $_SERVER['REQUEST_METHOD'] ."\t". $_SERVER['QUERY_STRING'] ."\n",FILE_APPEND);
  107.  
  108.         @header("HTTP/1.1 414 Request-URI Too Long");
  109.         @header("Status: 414 Request-URI Too Long");
  110.         @header("Connection: Close");
  111.         @exit;
  112.         // Не даем выполнять
  113. }
  114. ?>
  115.  
 
 Top
sKaa
Отправлено: 17 Декабря, 2011 - 18:10:42
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


Файл qwe.php
PHP:
скопировать код в буфер обмена
  1.  
  2. $test_global = 'TEST GLOBAL';
  3. $test__ = 123;
  4.  


Файл asd.php // При условии что оба файла (qwe.php, asd.php) находятся в одной директории
PHP:
скопировать код в буфер обмена
  1.  
  2. include('qwe.php');
  3.  
  4. global $test_global ;
  5. echo $test_global ;
  6.  

Файл zxc.php
PHP:
скопировать код в буфер обмена
  1.  
  2. // А вообще global принято использовать в таких случаях :
  3. include('qwe.php');
  4.  
  5. $test_global = function () {
  6.     // Тут могут быть использованы только переменные которые в видимости имён этой функции
  7.     $t = 0;
  8.     echo $t; // Работает
  9.     echo $test_global ; // Выдаст ошибку.
  10.     global $test_global, $test__;
  11.     echo $test_global; // Работает.
  12. };
  13. $test_global();
  14.  


Данил_123 пишет:
Весь код в студию, это в функции или в классе.. если нет, то зачем данный префикс

Вот зачем вам в для решения подобных вопросов нужен весь код?

(Отредактировано автором: 17 Декабря, 2011 - 18:12:21)

 
 Top
dmitry
Отправлено: 17 Декабря, 2011 - 18:29:15
Post Id


Новичок


Покинул форум
Сообщений всего: 27
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Я понял вашу мысль, спасибо. т.е. мы должны где то инициализировать переменную, а потом этот файл всегда подключать ...

Другой вопрос. Содержание переменной
echo $test_global ;
для разных пользователей будет одно и тоже?

Пример:
Я получаю данные из формы и кладу их в глобальную переменную ...
Другой пользователь заходит на сайт и он увидит значение глобальной переменной?

В общем вопрос такой, какие есть варианты?
Мне нужно два типа глобальных переменных использовать:
1. Глобальная переменная должна содержать одинаковое значение для всех посетителей.
2. Для каждого пользователя переменная должна держать свое значение.

Как правильно реализовать оба варианта?
 
 Top
caballero
Отправлено: 17 Декабря, 2011 - 18:40:21
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




глобальные переменные имеют в PHP совсем другой смысл чем в С. Другой пользователь никаким каком перменные первого не увидит - их процессы не пересекаются - даже сессионное хранилище у каждого свое. Вам надоь хранить разделяемые данные в БД или файле или типа того

(Отредактировано автором: 17 Декабря, 2011 - 18:40:48)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
sKaa
Отправлено: 17 Декабря, 2011 - 18:45:52
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


Переменные которые были отправлены на сервер и так уже хранятся в суперглобальных переменных. Почитайте что-нибудь про $_GET, $_POST.
Так-же есть ещё куча суперглобальных перменных. $_SESSION, $_SERVER, $_COOKIE итд.

Про сам вопрос ничего не могу сказать, т.к не понял его вообще.
Но попытаюсь объяснить :

Index.php
PHP:
скопировать код в буфер обмена
  1.  
  2. // Пользователь заходит на сайт и сервер выдает ему результат компиляции этого скрипта :
  3. // Но я так понял пользователей у вас может быть несколько и для каждого разные сценарии.
  4. // Так вот :
  5.  
  6. // Проверяет была-ли нажата кнопка формы. Если да, устанавливаем сессию.
  7. if(isset($_POST['submit'])) {
  8.    $_SESSION['name'] = 'Username';
  9. }
  10.  
  11. // Проверяем если ли сессия.
  12. // Сессии как правило хранятся на сервере и для каждого пользователя они уникальны.
  13. if(isset($_SESSION['name'])){
  14.     echo 'Поздравляем ! Вы авторизованы!';
  15. }else{
  16. ?>
  17. <form action='index.php' method='post'>
  18. <input type='submit' name='submit' />
  19. </form>
  20. <?
  21. }
  22. // Но после всех проверок у нас есть ещё переменная которая не зависит не от каких обстоятельств
  23. $test = 123;
  24. // И какой бы пользователь не зашел на сайт она будет для всех одинакова -)
  25. echo $test;
  26.  
 
 Top
dmitry
Отправлено: 17 Декабря, 2011 - 19:26:34
Post Id


Новичок


Покинул форум
Сообщений всего: 27
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Прошу Вас меня не ругать, за то что переспрашиваю.

В данном конкретном случае у каждого пользователя будет свое значение переменной?

caballero пишет:

include('qwe.php');
 
global $test_global ;
echo $test_global ;


Я спрашиваю относительно моего кода.

В примере ниже, я храню список злоумышленников в текстовом файле. Проверяю текстовый файл, если есть ип адрес злоумышленника, то не пускаю его на сайт. НО я подумал, зачем мне хранить это дело в файле, когда я могу хранить это в глобальной переменной. Таким образом, я хотел сократить нагрузку на жесткий диск ... Наверное глупо, но если будет посещаемость 10 000 посетителей в сутки то нагрузка будет серьезная ... Так оставить или все же переделывать на глобальную переменную?

PHP:
скопировать код в буфер обмена
  1.  
  2. $target_dir = ABSPATH.'/wp-content/elv';
  3.  
  4. if (file_exists($target_dir."/list_hack.txt"))
  5. {
  6.         $list_hack = file_get_contents($target_dir."/list_hack.txt");
  7.         if (strpos($list_hack,$_SERVER['REMOTE_ADDR']."\t".date("Y") ."-". date("m")."-". date("d")) !== false)
  8.         {
  9.                 @header("HTTP/1.1 414 Request-URI Too Long");
  10.                 @header("Status: 414 Request-URI Too Long");
  11.                 @header("Connection: Close");
  12.                 @exit;
  13.                 // Не пускаем на сайт хакеров в течении текущего дня.
  14.         }
  15. }
  16.  


Еще попутная проблема, которую я определил ... Может кто то подскажет мне ...
Выполнение доходит до этой строки, а потом выполняется другой плагин.
PHP:
скопировать код в буфер обмена
  1.  
  2. if (strpos($list_hack,$_SERVER['REMOTE_ADDR']."\t".date("Y") ."-". date("m")."-". date("d")) !== false)
  3.  

По этому наверное работает все это через раз ...
Можно глянуть на наглядном примере:
http://elvish[dot]biz?test.php
мы увидим белый экран. Должно сохраниться в файл ип адрес и
Нас не должно вообще пускать на сайт ... НО нас будет пускать т.к. плагин кеша обрабатывается...
Если посетить страницу, которая не кешируется, тогда мы снова видим молоко.
Пример: http://elvish[dot]biz/wp-admin (будет молоко).

Где то в вордпресе можно установить приоритет выполнения плагинов? Вроде где то встречал, но не сохранил и сейчас найти не могу.

Раньше плагин работал исправно, сейчас все перемешалось и работать отказывается.
 
 Top
sKaa
Отправлено: 17 Декабря, 2011 - 20:48:09
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


Хранения бан листа обычно реализуется с помощью базы данных ну или настройками сервера раз уж на то пошло... Если вы не имеете достаточно навыков чтобы хранить бан лист в текстовом файле, а затем вовремя читать его. Хранить бан лист в файле пхп в виде массива данных.

ban.php :
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $ban_list = array('192.168.1.1', '125.125.112.5', '112.155.167.10' );
  4. ?>
  5.  


Index.php :
PHP:
скопировать код в буфер обмена
  1.  
  2. include('ban.php');
  3. global $ban_list;
  4.  
  5. if(in_array($_SERVER['REMOTE_ADDR'], $ban_list)){
  6.         die('BAN');
  7. }
  8.  

Также массивы можно с таким же успехом хранить в текстовом файле и загружать оттуда :

PHP:
скопировать код в буфер обмена
  1.  
  2. // Сохранения бан листа в файл.
  3. $ban_list = array('192.168.1.1', '125.125.112.5', '112.155.167.10' );
  4. $handler = fopen('ban.txt', 'a+');
  5. flock($handler, LOCK_EX);
  6. fwrite($handler, serialize($ban_list));
  7. flock($handler, LOCK_UN);
  8. fclose($handler);
  9.  
  10. // Загрузка бан листа из файла :
  11.  
  12. $handler = fopen('ban.txt', 'r+b');
  13. flock($handler, LOCK_EX);
  14. $new_array = fread($handler, filesize('ban.txt'));
  15. flock($handler, LOCK_UN);
  16. fclose($handler);
  17. // Выведет массив со списком ай-пи из -файла.
  18. print_r($new_array);
  19. // Ну или вывод в строку :
  20. echo unserialize($new_array);
  21.  


А то что вы там понаписали я даже читать не очень хочу. Слишком ужасен пока у вас код ) Но думаю если вы писали на С то и к пыху привыкнете, просто время надо.
(Добавление)
Ну а вообще я ещё раз повторю это дело как минимум базы данных.
Самое простое это таблица в две колонки :
ip | reason
и пара строчек на пхп
PHP:
скопировать код в буфер обмена
  1. $rows = mysql_fetch_row(mysql_query('SELECT * FROM `banlist` WHERE ip='. $_SERVER['REMOTE_ADDR']));
  2. if($rows[0] > 0) dir('banned...');

Как видно вообще 2 строчки. Ну правда я тут не показал код подключения к базе данных и прочее потому что убежден, что это совсем другая тема, а имеено паттерны-сингтон. И описан такой код должен быть классом но думаю вам пока раны принципы ООП в пхп изучать )

(Отредактировано автором: 17 Декабря, 2011 - 21:16:45)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB