Поиск ошибок в cURL подключении
Сделать debug cURL запроса можно, установив CURLOPT_VERBOSE = true
Пример:
$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, true);
//... другие настройки
$data = curl_exec($ch);
var_dump($data);
Сделать debug cURL запроса можно, установив CURLOPT_VERBOSE = true
Пример:
$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, true);
//... другие настройки
$data = curl_exec($ch);
var_dump($data);
Для того, чтобы поменять по какой колонке в DataTable будут по умолчанию сортироваться данные, необходимо при инициализации таблицы прописать параметр order:
$(document).ready(function() {
$('#mytable').DataTable( {
"order": [[ 2, "desc" ]]
} );
} );
2 - в данном случае означает порядковый номер колонки. Будьте внимательны - отсчет начинается с 0!
desc - направление сортировки (еще можно использовать asc)
#mytable - id таблицы
Если у вас есть необходимость поменять дефолтные значения sql-mode, но они после перезагрузки сервера не срабатывают - то убедитесь, что эту настройку вы вписали в секцию под заголовком
[mysqld]
Если вы ее вставили в другом месте, то настройка не сработает.
Чтобы узнать полный URL, по которому обращается пользователь или скрипт, будет достаточно одной строки кода:
$link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
Для данных в формате JSON будет правильным указать такой content type:
application/json
Если неправильно записать \ в запросе Laravel к базе, то можно не получить ожидаемого результата.
Дело в том, что \ - это символ экранирования, и поэтому чтобы все работало как задумано, необходима немного другая форма записи.
К примеру, нам необходимо получить модель из базы с типом App\Picture
Примерный код:
ModelName::where('type', 'like', 'App\\\\Picture')->get()
Как видно из кода выше, единичный слеш заменяется на 4: \\\\
Постановка проблемы:
При работе с классом хочется знать, какие поля у этого класса имеются. Если брать Laravel класс, который расширяет Model, то не выйдет записать элементы класса (те, которые наполняются из базы) с помощью привычных private / public / protected. Вернее, записать-то конечно можно, но автоматически заполняться и работать как ожидается они перестанут.
Решение - сделать описание класса с помощью @property
При таком варианте ide будет видеть эти значения.
Пример:
/**
* Class Post
* @property string name - название
* @property string text - текст
*/
class Post extends Model
{
...
}
Если в mySQL запросе вы столкнулись с проблемой “ORDER BY clause is not in GROUP BY clause and contains nonaggregated column”
то ее можно временно решить с помощью запроса к базе:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Это временное решение, при каждом запуске сервера команду нужно выполнять заново.
Постоянное решение:
Прописать
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
в my.ini (или если там уже есть такая строка - удалить оттуда STRICT_TRANS_TABLES)
Для этого есть 2 команды.
Если необходимо откатить все, а то что было в последнем коммите удалить, то подойдет команда:
git reset --hard HEAD~1
Если изменения последнего коммита все-таки нужно оставить (просто они будут в состоянии uncommited):
git reset --soft HEAD~1
Чтобы сохранить данные, приходящие из POST запроса в формате raw (без пар ключ-значение), можно воспользоваться таким кодом:
$myInfo = file_get_contents('php://input');
В данном примере все записалось в переменную $myInfo, затем ее содержимое можно обработать и записать в файл или в базу, если это будет необходимо.
Иногда появляется необходимость напрямую обратиться в базу в Laravel, минуя Eloquent.
Сделать это можно с помощью класса DB (не забудьте его импортировать):
DB::select('select * from pages where id = ?', array(1));
DB::insert('insert into pages (name) values (?)', array('test'));
DB::update('update ...');
DB::delete('delete from ...');
Для того, чтобы вызвать команду Artisan не из командной строки, а из php, необходимо использовать
\Artisan::call('команда');
К примеру:
\Artisan::call('cache:clear');
Часто необходимо вместе с GET / POST запросом отправить свои заголовки.
Пример:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.mysite.ru/api.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//заголовки:
$headers = [
'testHeader: value',
'Accept-Encoding: gzip, deflate',
'Accept-Language: en-US,en;q=0.5',
'Cache-Control: no-cache'
];
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
curl_close ($ch);
testHeader - пример кастомного заголовка, ниже для примера приведены несколько стандартных.
В Laravel валидация картинок происходит достаточно просто.
Код-пример:
$data = $request->only('file');
$file = $data['file'];
$fileArray = array('image' => $file);
$maxSize = 1024; //kb
$allowedTypes = 'jpeg,jpg,png,gif';
//правила валидации:
$rules = array(
'image' => 'mimes:' . $allowedTypes . '|required|max:' . $maxSize
);
$validator = Validator::make($fileArray, $rules);
if ($validator->fails())
{
//если проверка не пройдена
} else
{
//проверка пройдена и можно сохранять картинку
};
Где:
$maxSize - максимальный “вес” картинки в килобайтах
$allowedTypes - через запятую можно указывать разрешенные расширения файлов.
required - если картинка обязательна
Чтобы сделать cURL запрос в формате application/json (в PHP), необходимо добавить CURLOPT_HTTPHEADER:
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
//... далее другие параметры
Чтобы вычислить для строки хэш с форматом SHA256 в PHP нужно использовать функцию hash:
$myString = 'test';
$result = hash('sha256', $myString);
где
$myString - строка, которую необходимо закодировать.
Первый параметр, передаваемый в функцию hash - это алгоритм хеширования, он может быть и другим, к примеру "md5", "sha1", "haval160,4" и т.д.
Узнать все доступные алгоритмы можно с помощью функции hash_algos()
Чтобы input в html форме принимал только картинки, достаточно прописать это с помощью атрибута accept.
В данном случае перечислим все варианты вручную (удобно, когда нужно разрешить определенные форматы - лишние можете просто удалить из списка):
<input type="file" name="example"
accept="image/png, image/gif, image/jpeg" />
Есть более короткий вариант записи (удобно, когда можно использовать любые картинки):
<input type="file" name="example" accept="image/*" />
Не забудьте, что совместно с этим все равно необходима валидация!
С появлением телефона Xiaomi (Redmi note 9 Pro) появилась проблема - при попытке подключиться к любой публичной сети телефон к ней подключался, но не получалось открыть страницу авторизации. Чаще всего люди сталкиваются с этой проблемой в метро или в аэропорту.
Существующие решения в сети ничего не дали.
Методом проб и ошибок удалось решить эту проблему так:
Для замены ВНЖ со сроком действия на вид на жительство без срока действия необходимо:
Оригиналы документов вернут после просмотра вернут.
Заявление можно написать в свободной форме, но так как там есть определенные вещи, которые необходимо указывать, лучше посмотреть образец.
Образец доступен тут:
В миграционном центре Москвы (Сахарово) выдали такой образец для заполнения (для замены вида на жительства со сроком действия на бессрочный):
Желательно не надеяться на то, что анкету выдадут на месте и заполнить ее заранее.
Помните, что подпись и дату ставят в присутствии должностного лица!