CURLOPT_TIMEOUT => 0
даёт 0 секунд на всё про всё. Как насчёт поставить там что-нибудь ненулевое вроде, скажем, пяти?CURLOPT_TIMEOUT — Максимально позволенное количество секунд для выполнения cURL-функций.https://www.php.net/manual/ru/function.curl-setopt.php
page_id (string) — внутренний идентификатор страницы. Используйте page_id, чтобы разместить два и более независимых виджетов на одной странице.
if event.object.text.lower() == "привет бот" or "Привет бот" or "эй бот" or "Эй бот":
читается как «если сообщение равно "привет бот" или всегда».or
перечисляет не варианты значения, с которыми производится сравнение, а варианты условий (которыми, в данном случае, должны быть сравнения результата event.object.text.lower()
с разными строками.govno
в коде. Согласно мануалам, ctime
возвращает строку с символом перевода строки в конце. Для иного форматирования там же рекомендуется использовать функцию strftime. Ну и после ]
переноса не хватает. Refresh: 0;url=http://site.site.ru/
<!-- в <head> -->
<meta http-equiv="refresh" content="0;url=http://site.site.ru/" />
window.location.replace("http://site.site.ru/");
DEFINER
подразумевается пользователь, который вызвал CREATE TRIGGER
. Имея некоторые права, можно при создании триггера сделать дефайнером кого-то другого. В любом случае, код самого триггера будет выполняться с правами дефайнера (а не пользователя в сессии), поэтому они должны быть предоставлены в необходимом объёме. str = document.getElementById('num').value
var num = Number(str);
if (isNaN(num)) {
// ошибка, введено не число
}
<input type="button" id="Button3" value="Посчитать" onclick="calculate()">
function calculate() {
// тут, собственно. надо получить число и степень из инпутов, посчитать результат, и куда-нибудь его вывести. Например, через alert(), или в дополнительный инпут:
// document.getElementById('result').value = result;
}
mount --bind
.mkdir /home/ivan/usr-local
mount --bind /usr/local /home/ivan/usr-local
umount /home/ivan/usr-local
./etc/fstab
прописать/usr/local /home/ivan/usr-local none bind
<input ... name="idpupil[]">
foreach ($idpupil as $pupil) { mysqli_query($link, "INSERT INTO yoqlama(idpupil,date,come,idteacher) VALUES ('$pupil', '$date', '$come', '$idteacher')"); }
$prepared = mysqli_stmt_init($link);
mysqli_stmt_prepare($prepared, "INSERT INTO yoqlama(idpupil,date,come,idteacher) VALUES (?, ?, ?, ?)");
$pupil = 0;
mysqli_stmt_bind_param($prepared, 'isii', $pupil, $date, $come, $idteacher);
// 'isii' , если date — строка, а ID и come — целые числа ( https://www.php.net/manual/ru/mysqli-stmt.bind-param.php )
foreach ($idpupil as $id) {
$pupil = $id;
mysqli_stmt_execute($prepared);
}
mysqli_stmt_close($prepared);
$_POST
и вставлять в запрос. Хотя для внутреннего сайта школы, наверно, сойдёт, вряд ли там будет много хакеров. self.client_address
в обработчике запросов.RequestHandler.handle()https://docs.python.org/3.4/library/socketserver.h...
This function must do all the work required to service a request. The default implementation does nothing. Several instance attributes are available to it; the request is available as self.request; the client address as self.client_address; and the server instance as self.server, in case it needs access to per-server information.
./configure && make && make install
, но звучит и здоровая критика этого метода, направленная на неудобство удаления (не все озабочиваются реализацией make uninstall
) и путаницу с файлами при обновлении.checkinstall
, или что-то более специфичное вроде debuild
.make install
превращает файлы из папки билда в обычные файлы, разбросанные по вашему диску. Частично, наверно, можно с этим бороться, указывая префикс пути для установки. winpty mysql -u root
, как там советуют. function promptGrade() {
do {
var grade = prompt('Введите значение от 1 до 100:', '4');
if (grade === null) return null; // чтобы можно было отменить ввод
grade = Number(grade); // ←это и это↓ — проверка, что вводится число
} while (grade < 1 || grade > 100 || Number.isNaN(grade)); // ну и проверка на диапазон
return grade;
}
npm i express cors body-parser
server.js
следующего содержания:// импорты
const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const path = require('path');
const fs = require('fs');
// пользовательские настройки:
// на каком порту слушать по умолчанию, можно заоверрайдить через переменную окружения PORT
const DEFAULT_PORT = 3001;
// полный путь файла, который перезаписываем (тут, относительно файла server.js)
const UPDATE_JSON_FILE = path.join(__dirname, 'rel/path/to/file.json');
// URL на сервере, в которую будем кидать POST-запрос
const UPDATE_JSON_ENDPOINT = '/api/update_json';
// конфигурирование обработчиков сервера и запуск на заданном порту
const server = express();
server.use(cors());
const rawParser = bodyParser.raw({type: '*/*'});
server.post(UPDATE_JSON_ENDPOINT, rawParser, (req, res) => {
const data = req.body instanceof Buffer ? req.body : Buffer.alloc(0);
fs.writeFile(UPDATE_JSON_FILE, data, (err) => {
if (!err) {
console.log(`Wrote ${Buffer.byteLength(data)} bytes`);
res.status(200).send('Success!');
} else {
console.log(err.toString());
res.status(500).send(err.toString());
}
});
});
server.get(UPDATE_JSON_ENDPOINT, (req, res) => { res.status(400).send('POST requests only!'); });
const port = process.env.PORT || DEFAULT_PORT;
console.log(`Listening on port ${port}`);
server.listen(port);
node server.js
PORT=8080 node server.js
fetch('http://localhost:3001/api/update_json', {method: 'POST', body: JSON.stringify(data)})…
/api/update_json
, 500 при ошибке записи в файл, ну и 200 если всё прошло успешно.package.json
прописать "proxy": "http://localhost:3001"
'/api/update_json'
, т. е. относительный запрос, без хостнейма, а Реакт догадается, что запрос внешний относительно приложения, и пойдёт к нашему серверу.