A PKCS #11 module returned CKR_DEVICE_ERROR, indicating that a problem has occurred with the token or slot.

Ходишь-ходишь в школу, а потом «бац — вторая смена»… Эмм я к тому что в 2020 поймать ошибку 2012 года, помеченную на CentOS как «закрытую».. Да еще и на PHP..

А дело вот в чем. На одном из проектов использую WebSocket сервер WorkMan, который имеет псевдомногопотоковость. Внутри потоков, активно использую вызовы curl_exec. Вот они то и вызывают ошибку «A PKCS #11 module returned CKR_DEVICE_ERROR, indicating that a problem has occurred with the token or slot.«, которая выводится при помощи curl_error. Описание ошибки было еще в далеком 2012 году:  https://bugzilla.redhat.com/show_bug.cgi?id=870856

Помечена как «закрытая». А вот и нет.. Хотя на Ubuntu не воспроизводится — только  «CentOS Linux release 7.8.2003»

Как лечим:

Генерация случайного имени файла при загрузке на сервере

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

Одно Но! тут нет контроля, что пользватель выбрал файл без расширения. Хотя с другой стороны, я например это ограничиваю на уровне выбора файла. Например так:

Вывод в лог файл любых входящих данных скрипта на PHP

Бывает полезно перехватить, что же сыплется на входе в PHP скрипт, если у тебя нет информации об этом. Сделать это можно например так:

Как завершить скрипты по таймауту

Задача: ряд скриптов иногда «зависают». Есть два варианта — переделать скрипт, чтобы не «зависал». Не всегда возможно. Второй вариант: отслеживать время работы скрипта, и по какому то предельному значению времени выполнения — убивать. Например так:

Добавляем данные в таблицу Google Sheeet при помощи PHP

Руководство от Гугла для ознакомления. Делано собственно по нему.

1) Включаем в своем аккаунте доступ к Google Sheets API. Сделать это можно прямо на странице «Руководство от Гугла«:

Получаем ID, секрет и файл credentials.json который сохраняем туда, где будет лежать основной скрипт

2) При помощи composer добавляем необходимые библиотеки

3) Создаем таблицу в гуглодокументах и узнаем её ID — можно взять прямо из URL. Так-же даем доступ «всем вподряд по ссылке»

4) Создаем следующего вида файл:

,где в переменной $spreadsheetId указываем id таблицы.

5) Запустим скрипт из командной строки. Он предложит открыть ссылку которую выведет на экран. По переходу по ссылке будет показан стандарный диалог «Бал-бла- Разрешить?». Разрешаем. На экран выведется токен. Его нужно будет скопировать в консоль.

После чего снова запускаем скрипт, и в таблице в конец последних заполненных ячеек добавятся данные.

1 6 7 8 9 10 22