PHP.SU

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

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

> Найдено сообщений: 49
ЧИМ Отправлено: 04 Марта, 2019 - 19:56:05 • Тема: Как составить исключающее условие? • Форум: JavaScript & VBScript

Ответов: 2
Просмотров: 531
Спасибо за ответ. Попробую применить ваш код.
ЧИМ Отправлено: 04 Марта, 2019 - 12:30:30 • Тема: Как составить исключающее условие? • Форум: JavaScript & VBScript

Ответов: 2
Просмотров: 531
Добрый день формучане!
Чёт не лезет в голову как обойти проблему не нагромождая её ненужными элементами.
Пытаюсь сделать что то вроде карточки, в которой по селекту выбирается пункт меню и исходя из него скрываются определённые строки из таблицы и показываются только нужные.
Вот код:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. <script>
  3.         function type_obj(){
  4.             select=document.getElementById("select_obj");
  5.             sist=document.getElementsByClassName('sist');
  6.             print=document.getElementsByClassName('print');
  7.         switch(select.options[select.selectedIndex].text){
  8.             case 'Системный блок':                        
  9.                 var i;
  10.                 for (i = 0; i < sist.length; i++) {
  11.                 sist[i].hidden=false;
  12.                 }
  13.                 var j;
  14.                 for (j = 0; j < print.length; j++) {
  15.                 print[j].hidden=true;
  16.                 }
  17.             break;
  18.             case 'Принтер':
  19.             case 'МФУ':                        
  20.                 var i;
  21.                 for (i = 0; i < sist.length; i++) {
  22.                 sist[i].hidden=true;
  23.                 }
  24.                 var j;
  25.                 for (j = 0; j < print.length; j++) {
  26.                 print[j].hidden=false;
  27.                 }
  28.             break;
  29.            
  30.         }
  31.         }
  32.     </script>
  33.  
  34. <select id="select_obj" onchange="type_obj()"><optgroup><option disabled selected value>Выбирите значение</option><option>Принтер</option><option>МФУ</option><option>Системный блок</option></optgroup></select>
  35.  
  36. <table border="1">
  37.         <thead>
  38.             <tr>
  39.                 <th colspan="2">Заполните данные</th>                
  40.             </tr>
  41.         </thead>
  42.         <tbody>
  43.             <tr class="sist" hidden="">
  44.                 <td>CPU</td>
  45.                 <td></td>
  46.             </tr>
  47.             <tr class="sist" hidden="">
  48.                 <td>RAM</td>
  49.                 <td></td>
  50.             </tr>
  51.             <tr class="sist" hidden="">
  52.                 <td>Drive</td>
  53.                 <td></td>
  54.             </tr>
  55.             <tr class="sist" hidden="">
  56.                 <td>OS</td>
  57.                 <td></td>
  58.             </tr>
  59.             <tr class="print" hidden="">
  60.                 <td>Формат</td>
  61.                 <td></td>
  62.             </tr>
  63.             <tr class="print" hidden="">
  64.                 <td>Тип</td>
  65.                 <td><select><optgroup><option>Лазерный</option><option>Струйный</option></select></td>
  66.             </tr>
  67.             <tr class="print" hidden="">
  68.                 <td>Картридж</td>
  69.                 <td></td>
  70.             </tr>
  71.         </tbody>
  72.     </table>
  73.  


Получается что для того что бы расширить список например до 10-20 наименований, мне нужно будет в каждом кейсе скрывать все строки таблицы которые не соответствуют выбору, т.е. делать по циклу для каждого класса чтоб изменить атрибут hidden.
Существует ли более элегантное исполнение таких примеров?
ЧИМ Отправлено: 27 Октября, 2018 - 09:23:44 • Тема: Выполнение длительного скрипта в фоне • Форум: Операционная система и системные вызовы

Ответов: 9
Просмотров: 3701
Оказалось, то чего я хотел не возможно сделать не породив ещё один процесс php. Теперь вроде бы всё нормально работает.
ЧИМ Отправлено: 19 Октября, 2018 - 13:44:36 • Тема: Выполнение длительного скрипта в фоне • Форум: Операционная система и системные вызовы

Ответов: 9
Просмотров: 3701
Чёт не вкурю никак я с этим EventLoop!
Вот пример моего кода:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. require '/home/chim/vendor/autoload.php';
  3. $loop = React\EventLoop\Factory::create();
  4. $login='test';
  5. $pass='test';
  6. $loop->addTimer(0.1, function () {
  7.  
  8. $command=shell_exec("bash <<'END'
  9. cd dt
  10. model --data /$login/$pass << EOF | tee -a log.txt
  11. $pass
  12. sync
  13. save
  14. EOF");
  15. print "Первое действие\n";
  16. });
  17. print "Второе действие\n";
  18. $loop->run();
  19.  

Но ни так, ни так:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. require '/home/chim/vendor/autoload.php';
  3. $loop = React\EventLoop\Factory::create();
  4. $login='test';
  5. $pass='test';
  6. $loop->addTimer(0.1, function () {
  7.  
  8.  
  9. print "Первое действие\n";
  10.  
  11. });
  12. $command=shell_exec("bash <<'END'
  13. cd dt
  14. model --data /$login/$pass << EOF | tee -a log.txt
  15. $pass
  16. sync
  17. save
  18. EOF");
  19. print "Второе действие\n";
  20. $loop->run();
  21.  


Ничёго не выходит. Процесс выполняется не в фоне, а постоянно зависшая вкладка которая просто вешает PHP.
ЧИМ Отправлено: 26 Сентября, 2018 - 10:34:03 • Тема: Выполнение длительного скрипта в фоне • Форум: Операционная система и системные вызовы

Ответов: 9
Просмотров: 3701
Вот на этой странице http://php.net/manual/ru/refs.fi...cess.process.php куча всякой всячины. Много чего именно для обработки веб запросов асинхронным способом.
Копание во всех этих темах меня натолкнуло на одну статью где описывалось как запустить shell в отдельном процессе и не ждать его окончания. Но это всё равно не то. Т.е. Скрипт выполняется, php пытается его всё же дождаться, но если мы перейдём на другую страницу, то скрипт будет выполняться в памяти пока не выполнится до конца, но вот если мы останемся на странице которая запросила его выполнение, то он будет ждать ответа от обработки скрипта пока не наступит окончание таймаута, затем просто выдаст чистый лист. В том видео что вы скинули, парен очень толково говорит про асинхронные запросы, но к сожалению я так и не понял каким макаром можно выполнить асинхронно shell и затем не дожидаясь его окончания можно было работать в программе, а когда скрипт будет выполнен, он автоматически выполнит пользовательскую функцию в которой например написано, мол такие вот данные занеси в базу. Опишу последовательность действий:
1. Выполняется многострочный скрипт(например):
CODE (htmlphp):
скопировать код в буфер обмена
  1. "bash <<'END'
  2. cd dt
  3. model --data /$login/$pass << EOF | tee -a log.txt
  4. $passw
  5. sync
  6. save
  7. EOF 2> /dev/null & echo $!");"

2. В момент синхронизации создаётся файлик с которым можно работать только после окончания процесса полной синхронизации данных. Соответственно мне нужно знать когда будет окончен процесс синхронизации(видимо нужно получить PID и мониторить его), например путём создания lock файла в текущей директории и удалением его в момент окончания синхронизации.
3. Нужно чтоб процесс с определённым тайм аутом, скажем в 3 секунды опрашивал состояние запущенного процесса(после синхронизации процесс выгрузится из памяти).
4. Когда увидит что процесса с данным PID нет в памяти -> запустить функцию обращения к файлу и записи данных в базу.

Вопрос. Как это сделать именно в фоне? Возможно ли чтоб php держал в памяти скрипт и выполнил его только после окончании синхронизации?
У меня в голову просто только дин вариант приходит. Вешать на страницу header скрипт ajax который будет с интервалом мониторить наличие lock файла или PID процесса синхронизации и после выполнять необходимый php скрипт. Но а как же асинхронная модель? Как её реализовать в таком случае?
ЧИМ Отправлено: 23 Сентября, 2018 - 16:49:06 • Тема: Выполнение длительного скрипта в фоне • Форум: Операционная система и системные вызовы

Ответов: 9
Просмотров: 3701
LIME пишет:
reactPhp
https://www[dot]youtube[dot]com/watch?v=39TUy0XiNqQ
(Добавление)
Мелкий уже некоторое время как необязательно хотеть очереди и/или ноду

Спасибо! Ушёл смотреть и читать доки. Даже не знал об этом.
ЧИМ Отправлено: 21 Сентября, 2018 - 22:13:31 • Тема: Выполнение длительного скрипта в фоне • Форум: Операционная система и системные вызовы

Ответов: 9
Просмотров: 3701
Мелкий пишет:
Архитектура правильная - очереди:
поставить сервер очередей
из веба ставится задача в очередь, как-то регистрируется что вот такая задача от вот того пользователя и ничего больше не ждёт
серверный процесс (да хоть из крона) опрашивает, есть ли новые задачи в очереди. Если есть - выполняет и сохраняет куда-нибудь результат
веб может в любое время уточнять, выполнена ли уже задача и получать результат


Дело в том что с cron нельзя, потому как передаются данные о логине и пароле. Они должны быть только в памяти на момент запроса, а позже нигде не светиться. Если отдавать это задание крону то получается что это потенциальная дыра.
ЧИМ Отправлено: 21 Сентября, 2018 - 16:16:19 • Тема: Выполнение длительного скрипта в фоне • Форум: Операционная система и системные вызовы

Ответов: 9
Просмотров: 3701
Доброго времени суток! Подскажите, каким образом можно отправить выполняться скрипт в фоне на неопределённое время, но в тоже время мне нужен вывод который он организует в командную строку?
Ситуация следующая. Запускаю в линуксе определённый демон, со значениями логин и пароль и некоторыми командами уже при входе в демон, после чего идёт синхронизация данных. Вот мне нужно чтоб эта синхронизация данных была в фоне и страница её не ждала, но когда она закончится чтоб данные которые выдаст скрипт в консоль, записались в базу данных.
P.S. Сейчас выполняю это с помощью shell_exec, но страница долго крутится и уходить с неё нельзя. Да и смысла нет этот процесс пользователю ждать, так как он может длиться 5 минут и более.
ЧИМ Отправлено: 12 Сентября, 2017 - 11:07:51 • Тема: Как узнать есть ли определённые права у пользователя? • Форум: SQL и Архитектура БД

Ответов: 0
Просмотров: 31
Мучаюсь над проблемой получения информации о том есть ли права у пользователя на определённые команды к определённым таблицам. Например есть пользователь user и у него есть права на SELECT в таблице table1, а так же есть права на SELECT, DELETE в таблице table2. Как определить есть ли у пользователя права для удаления конкретно для таблицы table2?
Если использовать команду: "SHOW GRANTS FOR user; " то выводятся все привилегии пользователя, что в свою очередь трудно автоматически обработать(точнее я не представляю как из меняющегося вывода выбрать DELETE который будет относиться именно к таблице table2 и не перепутать с другими таблицами.)
Если использовать команду: "SELECT * FROM information_schema.user_privileges;" то выводятся не все привилегии(в моём случае выводится только одна привилегия "USAGE"),
Если использовать команду "USE information_schema; SELECT TABLE_NAME, PRIVILEGES FROM COLUMNS;" то привилегии выводятся только те, которые совпадают со списком "select,insert,update,references" т.е. в моём случае DELETE здесь нет.
Неужели никак нельзя узнать есть ли определённые права у пользователя?
ЧИМ Отправлено: 08 Августа, 2017 - 18:01:37 • Тема: Проблема в создании списка с автосуммой. Как динамически определять input для выведения суммы? • Форум: JavaScript & VBScript

Ответов: 4
Просмотров: 1227
Благодарю за помощь!
ЧИМ Отправлено: 02 Августа, 2017 - 18:52:29 • Тема: Проблема в создании списка с автосуммой. Как динамически определять input для выведения суммы? • Форум: JavaScript & VBScript

Ответов: 4
Просмотров: 1227
select неудобен по той простой причине что количество может быть хоть и 50 и 1000. Кстати пример не совсем рабочий, так как не изменяется значение суммы от каждого изменения значения select.
На данный момент я уже додумался как сделать и конструкция уже работает, она выглядит вот так:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <html>
  3.     <head>
  4.         <title>exemple</title>
  5.         <meta charset="UTF-8">
  6.         <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7.     </head>
  8.     <body>
  9.         <table border="1">
  10.             <thead>
  11.                 <tr><th></th>
  12.                     <th>Цена</th>
  13.                     <th>Кол-во</th>
  14.                     <th>Сумма</th>
  15.                 </tr>
  16.             </thead>
  17.             <tbody>
  18.                 <tr>
  19.                     <td><input type="text" class="num" id="num1" value="1"> </td>
  20.                     <td><input type="text" class="cena" id="cena1" oninput="change(this)"></td>
  21.                     <td><input type="text" class="kol_vo" id="kol_vo1" oninput="change(this)"></td>
  22.                     <td><input type="text" class="sum" id="sum1" ></td>
  23.                 </tr>
  24.                 <tr>
  25.                     <td><input type="text" class="num" id="num2" value="2"></td>
  26.                     <td><input type="text" class="cena" id="cena2" oninput="change(this)"></td>
  27.                     <td><input type="text" class="kol_vo" id="kol_vo2" oninput="change(this)"></td>
  28.                     <td><input type="text" class="summa" id="sum2"></td>
  29.            
  30.                 </tr>
  31.             </tbody>
  32.         </table>
  33.          cena: <span id="ws1"></span><br>
  34.          kol_vo: <span id="ws2"></span><br>
  35.          summa: <span id="ws3"></span><br>
  36. <script>
  37.   function change(id)
  38.   {              
  39.         if (id.id.charAt(0)=='c')
  40.         {
  41.         cena=id.value;        
  42.         i_sum=id.id.charAt(4);        
  43.         new_kol_id=document.getElementById('kol_vo'+i_sum).value;        
  44.         document.getElementById('sum'+i_sum).value=Number(cena)*Number(new_kol_id);        
  45.         }
  46.       if (id.id.charAt(0)=='k')
  47.         {
  48.         kol_vo=id.value;        
  49.         i_sum=id.id.charAt(6);
  50.         new_cena_id=document.getElementById('cena'+i_sum).value;        
  51.         document.getElementById('sum'+i_sum).value=Number(new_cena_id)*Number(kol_vo);        
  52.         }    
  53.   }
  54. </script>          
  55.     </body>
  56. </html>
  57.  
ЧИМ Отправлено: 01 Августа, 2017 - 23:01:09 • Тема: Проблема в создании списка с автосуммой. Как динамически определять input для выведения суммы? • Форум: JavaScript & VBScript

Ответов: 4
Просмотров: 1227
Доброго времени суток!
Пытаюсь создать макет таблицы в которой будет неопределённое количество строк, но необходимо динамически вычислять сумму 2х input в строке и выводить её в третью. Как создать динамическое определение ID input в строке для дальнейшего манипулирования их значениями?
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <body>
  3.         <table border="1">
  4.             <thead>
  5.                 <tr><th></th>
  6.                     <th>Цена</th>
  7.                     <th>Кол-во</th>
  8.                     <th>Сумма</th>
  9.                 </tr>
  10.             </thead>
  11.             <tbody>
  12.                 <tr>
  13.                     <td><input type="text" id="num" value="1"> </td>
  14.                     <td><input type="text" id="cena1"> </td>
  15.                     <td><input type="text" id="kol_vo1"> </td>
  16.                     <td><input type="text" id="sum1"> </td>
  17.                 </tr>
  18.                 <tr>
  19.                     <td><input type="text" id="num" value="2"></td>
  20.                     <td><input type="text" id="cena2"> </td>
  21.                     <td><input type="text" id="kol_vo2"></td>
  22.                     <td><input type="text" id="sum2"></td>
  23.                 </tr>
  24.             </tbody>
  25.         </table>
  26. <script>
  27.   ed1=document.getElementById("cena1");
  28.   ed2=document.getElementById("kol_vo1");
  29.   ed1.oninput = function()
  30.   {
  31.     document.getElementById('sum1').value = Number(ed1.value)*Number(ed2.value);
  32.   }
  33.   ed2.oninput = function()
  34.   {
  35.     document.getElementById('sum1').value = Number(ed1.value)*Number(ed2.value);
  36.   }
  37. </script>          
  38.     </body>
  39.  
ЧИМ Отправлено: 10 Июня, 2017 - 12:40:03 • Тема: Ошибка при записи в файл • Форум: Apache и другие веб-серверы

Ответов: 3
Просмотров: 1067
LIME пишет:
Жесть
Зачем ставить хитрые сборки? Всегда был против всяких панелей управления итд итп
Чистый дистрибутив залог здоровьяУлыбка

Какие сборки? О чём вы говорите? Чистый Дистрибутив CentOS 7.3
ЧИМ Отправлено: 06 Июня, 2017 - 21:43:41 • Тема: Ошибка при записи в файл • Форум: Apache и другие веб-серверы

Ответов: 3
Просмотров: 1067
В общем дело было в хитрых настройках SELinux.
Вот здесь я прочитал про нужные мне параметры: http://www[dot]serverlab[dot]ca/tutorial[dot][dot][dot]ache-web-servers
А именно "httpd_sys_rw_content_t" после использования этой настройки всё начало записываться нормально.
Чё то они перемудрили с этим SELinux...
ЧИМ Отправлено: 01 Июня, 2017 - 15:07:22 • Тема: Ошибка при записи в файл • Форум: Apache и другие веб-серверы

Ответов: 3
Просмотров: 1067
Доброго времени суток. Переношу свой проект на живой сервер и столкнулся с проблемой. У меня есть функция которая записывает данные в файл, а тут она перестала работать и в логи пишет следующее:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. 2017/06/01 15:08:57 [error] 8736#8736: *2 FastCGI sent in stderr: "PHP message: PHP Warning:  fopen(tx.txt): failed to open stream: Permission denied in /var/www/apteka/config/wr.php on line 3" while reading response header from upstream, client: 192.168.хх.хх, server: localhost, request: "GET /apteka/config/wr.php HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm/php-fpm.sock:", host: "192.168.хх.хх"
  3.  

Сам код файла я создал просто для пробы, чтоб отсечь всё ненужное.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $file = 'tx.txt';
  4. fopen($file, 'x+');
  5. echo $file;
  6.  

1. Права на каталог 777,
2. Владелец каталога nginx,
3. Установлена связка CentOS 7.3.1611+nginx 1.12 +php7.1.5 +php-fpm 3.1.0
4. В файле php.ini функция allow_url_fopen = On
В чём может быть проблема?

Страниц (4): [1] 2 3 4 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB