FAQ php, MySQL, bash и т.д.

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
Mixman
Сообщения: 395
Зарегистрирован: 17 фев 2013, 23:49
Откуда: Волгодонск, Ростовская обл.
Контактная информация:

FAQ php, MySQL, bash и т.д.

Сообщение Mixman » 21 ноя 2013, 17:29

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


У меня вот вопрос. если в php скрипте (например mainscript.php) стоит например file_get_contents("http://адрес/subscript.php?s=2&d=4"), то основной скрипт mainscript.php не выполняется дальше, пока не выполнится полностью ссылаемый subscript.php.

Есть ли команда в php, чтобы запустить subscipt.php и, не дожидаясь результата, выполнялся код mainsript.php дальше?

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: FAQ php, MySQL, bash и т.д.

Сообщение Andrey_B » 21 ноя 2013, 17:40

file_get_contents возвращает данные (string), а потому программа будет ждать, пока закончится выполнение функции. Ведь эти данные могут быть использованы в программе ниже.
В вашем случае можно использовать вызов внешней программы через exec() или system(). Например exec("curl или wget ... &") или использовать библиотеку cURL и функции curl_*

Mixman
Сообщения: 395
Зарегистрирован: 17 фев 2013, 23:49
Откуда: Волгодонск, Ростовская обл.
Контактная информация:

Re: FAQ php, MySQL, bash и т.д.

Сообщение Mixman » 21 ноя 2013, 17:41

exec() тоже ждет выполнения, потом продолжает.

system() не пробовал.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: FAQ php, MySQL, bash и т.д.

Сообщение Andrey_B » 21 ноя 2013, 17:42

Обратите внимание на символ "&" в моем примере.
Поправка. Вот так работает:

exec("$cmd > /dev/null &");

Urbas81
Сообщения: 313
Зарегистрирован: 28 авг 2012, 14:22

Re: FAQ php, MySQL, bash и т.д.

Сообщение Urbas81 » 21 ноя 2013, 18:12

Как вовремя тема появилась, сейчас разбираюсь с аналогичной проблемой, подскажите для такого запроса
http://192.168.1.14/sec/?pt=4&cmd=4:2 что лучше применить из под php, чтоб не тормозило при отсутствии в сети ус-ва, получать с ус-ва ничего не надо.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: FAQ php, MySQL, bash и т.д.

Сообщение Andrey_B » 21 ноя 2013, 18:19

Urbas81, помимо уже сказанного про использование exec() и cURL, для функции file_get_contents можно задать нужный timeout через ini_set() или stream_context_create().

Mixman
Сообщения: 395
Зарегистрирован: 17 фев 2013, 23:49
Откуда: Волгодонск, Ростовская обл.
Контактная информация:

Re: FAQ php, MySQL, bash и т.д.

Сообщение Mixman » 21 ноя 2013, 18:19

Andrey_B писал(а):Поправка. Вот так работает:

exec("$cmd > /dev/null &");
Если запускаю с консоли под рут, то все запускается и работает как надо, только не заканчивается. exit перед ?> не помогает.
Вложения
Screenshot_2.jpg
Screenshot_2.jpg (42.95 КБ) 17803 просмотра

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: FAQ php, MySQL, bash и т.д.

Сообщение Andrey_B » 21 ноя 2013, 18:30

Mixman, на самом деле выполнение скрипта заканчивается. Вы просто видите вывод запущенного через exec() скрипта.
Попробуйте вот так
php /var/www/scripts/test1.php 2> /dev/null
А чтобы убедится в том, что все именно так, в конце test1.php пропишите
echo "THE END\n";

Urbas81
Сообщения: 313
Зарегистрирован: 28 авг 2012, 14:22

Re: FAQ php, MySQL, bash и т.д.

Сообщение Urbas81 » 21 ноя 2013, 18:53

Andrey_B писал(а):Urbas81, помимо уже сказанного про использование exec() и cURL, для функции file_get_contents можно задать нужный timeout через ini_set() или stream_context_create().
нагуглил такое:

$ctx = stream_context_create(array(
'http' => array(
'timeout' => 3
)
)
);
file_get_contents("http://192.168.1.14/sec/?pt=4&cmd=4:2", 0, $ctx);

вроде стало лучше, warning только появляется.

gnork
Сообщения: 54
Зарегистрирован: 08 янв 2013, 20:39

Re: FAQ php, MySQL, bash и т.д.

Сообщение gnork » 22 ноя 2013, 00:24

Пытаюсь понять, как передать данные в графики HIGHCHARTS. Вот тут http://www.highcharts.com/docs/working- ... -live-data есть описание. В первом пункте написан РНР-скрипт, который выдает данные в JSON. Вопрос, как этим пользоваться? Запускаю этот скрипт в терминале, он выдает пару цифр (X и Y для графика) и завершается. При этом на графике новой точки не появляется. Пробовал зациклить этот РНР. Соответственно выдает кучу пар цифр. Но на графике опять же ничего. Собственно код для графика скопирован отсюда: http://www.highcharts.com/studies/live-server.htm
В ходе поиска решения набрел на эту страничку: http://www.codething.ru/ajax_json.php. Там отдельно написано, что
PHP-скрипты должны выполняться на веб-сервере, а не запускаться в браузере, как файлы.
Похоже я в терминологии совсем не разбираюсь, но как все-таки запустить этот файлик, чтоб он на график данные выдал?

Urbas81
Сообщения: 313
Зарегистрирован: 28 авг 2012, 14:22

Re: FAQ php, MySQL, bash и т.д.

Сообщение Urbas81 » 22 ноя 2013, 11:04

gnork писал(а):Пытаюсь понять, как передать данные в графики HIGHCHARTS. Вот тут http://www.highcharts.com/docs/working- ... -live-data есть описание. В первом пункте написан РНР-скрипт, который выдает данные в JSON. Вопрос, как этим пользоваться? Запускаю этот скрипт в терминале, он выдает пару цифр (X и Y для графика) и завершается. При этом на графике новой точки не появляется. Пробовал зациклить этот РНР. Соответственно выдает кучу пар цифр. Но на графике опять же ничего. Собственно код для графика скопирован отсюда: http://www.highcharts.com/studies/live-server.htm
В ходе поиска решения набрел на эту страничку: http://www.codething.ru/ajax_json.php. Там отдельно написано, что
PHP-скрипты должны выполняться на веб-сервере, а не запускаться в браузере, как файлы.
Похоже я в терминологии совсем не разбираюсь, но как все-таки запустить этот файлик, чтоб он на график данные выдал?
Запускать надо не php файл, а html в котором прописан правильный адрес php файла, который размещен на сервере, тогда будут строится графики. Проще скачать примеры этих графиков, найти там данный тип и посмотреть как там все взаимодействует, не забыть еще поместить нужный бибилиотеки и посмотреть чтоб в htm файле правильно пути были прописаны.

gnork
Сообщения: 54
Зарегистрирован: 08 янв 2013, 20:39

Re: FAQ php, MySQL, bash и т.д.

Сообщение gnork » 22 ноя 2013, 11:48

Urbas81 писал(а): Запускать надо не php файл, а html в котором прописан правильный адрес php файла, который размещен на сервере, тогда будут строится графики. Проще скачать примеры этих графиков, найти там данный тип и посмотреть как там все взаимодействует, не забыть еще поместить нужный бибилиотеки и посмотреть чтоб в htm файле правильно пути были прописаны.
Если можно, чуть подробнее.
Что делаю я:
1. Зашел на http://www.highcharts.com/studies/live-server.htm, скопировал оттуда код страницы и сохранил к себе в /www под именем grafik.html
2. Отсюда http://www.highcharts.com/docs/working- ... -live-data скопировал код из первого пункта и сохранил его в ту же /www под именем live-server-data.php
3. Открываю grafik.html в браузере и наблюдаю вот такую картину:
Изображение
Если я правильно понимаю, эта часть работает правильно и просто ждет данные.
4. Каким образом запустить live-server-data.php, чтобы он эти данные передал? При открытии его в браузере, предлагает сохранить файл, в котором 2 цифры. При запуске в терминале выдает эти 2 цифры в терминале. Надо добавить еще один HTML, который будет ссылаться на live-server-data.php? Что в нем должно быть написано?

Urbas81
Сообщения: 313
Зарегистрирован: 28 авг 2012, 14:22

Re: FAQ php, MySQL, bash и т.д.

Сообщение Urbas81 » 22 ноя 2013, 12:38

Идем сюда http://www.highcharts.com/, там качаем папку Highstock demo.Находим наш Dynamically updated data, берем исходник htm из папки, там же есть все необходимые бибилиотеки, ложится все в папку сервера, только нужно следить за правильностью путей js файлов.

Вот мой подобный файл:

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Highstock Example</title>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">




var chart; // ???? ?????
function requestData() {
$.ajax({
url: 'gg.php',
success: function(point) {
var series = chart.series[0],

shift = series.data.length > 1000; // ???????????????0

// add the point
chart.series[0].addPoint(eval(point), true, shift);
// call it again after one second
setTimeout(requestData, 1000);
},
cache: false
});
}



$(document).ready(function() {
chart = new Highcharts.Chart({
chart: {
renderTo: 'container',
defaultSeriesType: 'spline',
events: {
load: requestData
}
},
title: {
text: 'График'
},
xAxis: {
type: 'datetime',
tickPixelInterval: 150,
maxZoom: 50 * 1000
},
yAxis: {
minPadding: 0.2,
maxPadding: 0.2,
title: {
text: 'Value',
margin: 80
}
},
series: [{
name: 'Test',
data: []
}]
});
});

</script>
</head>
<body>

<script src="jquery.min.js" type="text/javascript"></script>
<script src="highcharts.js" type="text/javascript"></script>
<script src="exporting.js"></script>


<div id="container" style="height: 500px; min-width: 500px"></div>
</body>

</html>

Выделенное красным заменить на свое имя php с кодом, там где синее проследить пути, в данном случае у меня все лежит там же где и html, но в исходниках highcharts пути другие, там разбросано по папкам.

Urbas81
Сообщения: 313
Зарегистрирован: 28 авг 2012, 14:22

Re: FAQ php, MySQL, bash и т.д.

Сообщение Urbas81 » 22 ноя 2013, 12:46

Сейчас проверил скопировал этот код

Код: Выделить всё

<?php 
// Set the JSON header
header("Content-type: text/json");

// The x value is the current JavaScript time, which is the Unix time multiplied by 1000.
$x = time() * 1000;
// The y value is a random number
$y = rand(0, 100);

// Create a PHP array and echo it as JSON
$ret = array($x, $y);
echo json_encode($ret);
?>
назвал его gg.php, все строится.

gnork
Сообщения: 54
Зарегистрирован: 08 янв 2013, 20:39

Re: FAQ php, MySQL, bash и т.д.

Сообщение gnork » 22 ноя 2013, 13:04

Всё в точности так и сделано.
Urbas81 писал(а): назвал его gg.php, все строится.
Этот самый gg.php как-то запускать надо или тот большой HTML сам из него все получает?

Urbas81
Сообщения: 313
Зарегистрирован: 28 авг 2012, 14:22

Re: FAQ php, MySQL, bash и т.д.

Сообщение Urbas81 » 22 ноя 2013, 13:36

gnork писал(а): Этот самый gg.php как-то запускать надо или тот большой HTML сам из него все получает?
Сам все получит. Запускать htm, только не двойным счелчком, а через адрес в строке браузера.

gnork
Сообщения: 54
Зарегистрирован: 08 янв 2013, 20:39

Re: FAQ php, MySQL, bash и т.д.

Сообщение gnork » 22 ноя 2013, 13:41

Urbas81 писал(а): Сам все получит. Запускать htm, только не двойным счелчком, а через адрес в строке браузера.
Ага. Вот тут то похоже и кроется ошибка моя. Если двойным щелчком, то страничка хоть и без линии, но оси графика рисует. А если через "localhost", то график вообще не показывается, только текст, который после него. Вот так:
Изображение
Похоже, что где-то что-то надо настраивать. В каком направлении искать?

Urbas81
Сообщения: 313
Зарегистрирован: 28 авг 2012, 14:22

Re: FAQ php, MySQL, bash и т.д.

Сообщение Urbas81 » 22 ноя 2013, 13:49

gnork писал(а): Ага. Вот тут то похоже и кроется ошибка моя. Если двойным щелчком, то страничка хоть и без линии, но оси графика рисует. А если через "localhost", то график вообще не показывается, только текст, который после него. Вот так:
Изображение
Похоже, что где-то что-то надо настраивать. В каком направлении искать?
Того текста вообще не должно быть, вы просто скопировали код уже сгенерированной страницы в браузере. Возмите мой код для html вставте через Notepadd++, кодировка UTF-8(без BOM), обозвать его 1.html, положить в корень сервера, туда же положить созданный gg.php с кодом выше, туда же положить exporting.js, highcharts.js, jquery.min.js. Запускать http://IP/1.html. Файлы js взять из скачанной папки с аналогичным примером.

gnork
Сообщения: 54
Зарегистрирован: 08 янв 2013, 20:39

Re: FAQ php, MySQL, bash и т.д.

Сообщение gnork » 22 ноя 2013, 13:59

Urbas81 писал(а): Того текста вообще не должно быть, вы просто скопировали код уже сгенерированной страницы в браузере. Возмите мой код для html вставте через Notepadd++, кодировка UTF-8(без BOM), обозвать его 1.html, положить в корень сервера, туда же положить созданный gg.php с кодом выше, туда же положить exporting.js, highcharts.js, jquery.min.js. Запускать http://IP/1.html. Файлы js взять из скачанной папки с аналогичным примером.
Сделано. Результат тот же. При кликаньи по файлу получаем пустой график. При запуске из строки получаем пустую страницу.
Может это поможет найти причину: месяц назад вылезало похожее: viewtopic.php?f=1&t=2&start=400#p9799. Тогда не разобрался, но очень похоже, что корень один. Тоже не отображается графическая часть при входе из строки.

Urbas81
Сообщения: 313
Зарегистрирован: 28 авг 2012, 14:22

Re: FAQ php, MySQL, bash и т.д.

Сообщение Urbas81 » 22 ноя 2013, 14:08

gnork писал(а): Сделано. Результат тот же. При кликаньи по файлу получаем пустой график. При запуске из строки получаем пустую страницу.
Может это поможет найти причину: месяц назад вылезало похожее: viewtopic.php?f=1&t=2&start=400#p9799. Тогда не разобрался, но очень похоже, что корень один. Тоже не отображается графическая часть при входе из строки.
Если это на линуксе, то я пас :mrgreen: я это делаю на WXP с сервером Majordomo, если есть машина с XP можно поставить и там по быстрому проверить.

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

Ответить