Задать вопрос
  • Как создать рабочее пространство в vs code?

    rqdkmndh
    @rqdkmndh
    Web-разработчик
    Если в папке проекта создать папку с названием .vscode и в ней файл settings.json, то при открытии этого проекта все настройки из этого файла применятся автоматически. Еще можно создать файл окружения с расширением .code-workspace и в нем указать путь к нужному проекту и какие нужно расширения vscode.
    Ответ написан
    Комментировать
  • Что входит в отладку скрипта на PHP?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    В отладку входит два основных механизма:
    1. Включение полного отображения ошибок (или логирования, если на боевом сервере)
    2. Пошаговая трассировка с контролем состояния переменных (с использованием IDE или вручную через var_dump/die).

    В вашем случае, очевидно что не был выполнен пункт №1. Какой бы ни была причина проблем, РНР всегда выдаст ошибку. Так что в вашем случае надо было просто убедиться, что error_reporting=E_ALL, а display_errpos=1

    А вот нижеследующее утверждение не имеет смысла
    PHP данную ошибку не показывал, т.к. не использовалась функция проверки записи в директорию is_writable().

    РНР не нужны никакие функции, чтобы сообщить об ошибке. А is_writable() обычно используется как раз наоборот, чтобы подавить ошибку и дальше работать как ни в чём не бывало. Ну или в лучшем случае выбросить какую-нибудь бессмысленную ошибку типа "Не могу записать в файл", не говорящую ничего о реальной причине проблемы.
    Ответ написан
    4 комментария
  • Как в bash посчитать количество строк, выведенных на экран после выполнения команды?

    BuriK666
    @BuriK666
    Компьютерный псих
    https://linux.die.net/man/1/wc
    ls -l|wc -l

    Если нужно вывести и посчитать, то
    res=$(ls -l)
    echo "$res"
    echo $(echo "$res"|wc -l)
    Ответ написан
    1 комментарий
  • Как решить проблему с экспортом $PATH?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    посмотри в домашнем каталоге .profile, .bashrc
    там возможно PATH переназначается как-то так PATH=/opt/java/latest/bin
    а должно быть PATH=$PATH:/opt/java/latest/bin - то есть сохраняя предыдущее значение и дописывая в него новое.
    Ответ написан
    3 комментария
  • Как преобразовать JavaScript-объект в строку формата application/x-www-form-urlencoded?

    zkrvndm
    @zkrvndm Автор вопроса
    Архитектор решений
    Нашел в сети упоминание, что у конструктора new URLSearchParams() имеются встроенные методы для получения строки запроса, то есть мы можем используя чисто нативные методы сформировать тело запроса:
    var objeto = { 'raz' : 'Первое свойство', 'dva' : 'Второе свойство' };
    
    var params = new URLSearchParams();
    
    for (var prop in objeto) {
    	params.append(prop, objeto[prop]);
    }
    
    console.log(params.toString());

    Способ хорош, но он не позволяет преобразовывать вложенные объекты, в этом его минус.

    Используя этот метод за основу написал рекурсивный конвертер, который может преобразовывать в строку запроса объекты любого уровня вложенности сколь бы сложные они не были:
    // Функция для преобразования объекта
    // в строку формата x-www-form-urlencoded:
    
    function httpBuildQuery(object_to_convert) {
    	
    	var params = new URLSearchParams();
    	
    	var paramsGenerator = function(parent_key, iterate_object) {
    		
    		for (var current_key in iterate_object) {
    			
    			if (typeof iterate_object[current_key] == 'string' || typeof iterate_object[current_key] == 'number') {
    				
    				if (parent_key.length > 0) {
    					var property_path = parent_key + '[' + current_key + ']';
    				} else {
    					var property_path = current_key;
    				}
    				
    				params.append(property_path, iterate_object[current_key]);
    				
    			} else if (typeof iterate_object[current_key] == 'object') {
    				
    				if (parent_key.length > 0) {
    					var property_path = parent_key + '[' + current_key + ']';
    				} else {
    					var property_path = current_key;
    				}
    				
    				paramsGenerator(property_path, iterate_object[current_key]);
    				
    			}
    			
    		}
    		
    	}
    	
    	paramsGenerator('', object_to_convert);
    	
    	return params.toString();
    	
    }
    
    // Потестируем работу функции на примере:
    
    var test_object = {
    	'raz' : 'Первое свойство',
    	'dva' : 'Второе свойство',
    	'tri' : {
    		'test' : 'Тест',
    		'proverka' : 'Проверка',
    		'massiv' : [
    			'aaa',
    			'bbb',
    			'ccc',
    			{
    				'lalala' : 'lololo',
    				'tratata' : 'trototo'
    			},
    			123,
    			345,
    			567
    		]
    	}
    };
    
    var send_string = httpBuildQuery(test_object);
    
    var response = await (await fetch('https://nadim.work/post_view.php', {
    	method: 'POST',
    	headers: {
    		'Content-Length' : send_string.length,
    		'Content-Type' : 'application/x-www-form-urlencoded'
    	},
    	body: send_string
    })).text();
    
    console.log(response);

    Если забьете этот код в консоль увидите, что функция прекрасно справляется с преобразованием. Оставляю код для будущих поколений, надеюсь он еще много кому пригодится, особенно если вам нужно отправить типовой POST-запрос именно через fetch() не используя конструктор new FormData() совсем.
    Ответ написан
    2 комментария
  • Как и для чего используется php://input?

    @granty
    Данные и так передаются по POST (или GET), но есть нюансы их обработки на стороне сервера.

    1. POST и GET данные в виде parameter=value&param2=val2 автоматически обрабатываются сервером и заполняются глобальные массивы $_POST/$_GET/$_REQUEST:
    $_POST['parameter'] = value;
    $_POST['param2'] = val2;

    GET-параметры при этом ещё и автоматически декодируются по urldecode().
    Через php://input можно получить "сырые" необработанные данные.

    2. Методом POST можно прислать, например, объект JSON, указав 'Content-type: application/json; charset=utf-8'. При этом массив-обёртка $_POST будет пуста, тк не присылается Имя_Параметра, а присылается только Значение_Параметра, и сервер не обрабатывает такие данные автоматически.
    Получить такие данные можно только через php://input, так как глобальные массивы $_POST/$_GET будут пустыми.
    Ответ написан
    Комментировать
  • Как передать в файл-шаблон, только одну переменную?

    SerafimArts
    @SerafimArts
    Senior Notepad Reader
    Мне кажется, что как-то так можно:


    почти, примерно как-то так:

    /** @param array $args */ 
    function render(): string
    {
        // Распаковка "виртуального" аргумента (массива) в набор переменных для шаблона
        \extract(\func_get_args()[0] ?? []);
    
        // Перенаправление stdout в буфер
        \ob_start();
        try {
            require __DIR__ . '/path/to/template.php';
        } catch(\Throwable) {
            // Что-то пошло не так...
        } finally {
            return \ob_get_clean(); 
        }
    }
    Ответ написан
    Комментировать
  • Поставить теги в одну строку?

    Aligatro
    @Aligatro
    Turn food and coffee into software...
    <span class="items pizzanameM">Маргарита</span>
    <span class="items pizzanameF">4 сыра</span>
    <span class="items pizzanameV">Вегетарианская</span>


    .items {
       display:inline-block;
    }
    Ответ написан
    Комментировать
  • Gorilla Mux: не берет значение в vars := mux.Vars(r) Golang?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Через mux.Vars вы можете извлечь только то, что в URL, т.е. части URL, а параметры нужно извлекать через r.URL.Query().Get("param_name")

    Давайте разберём пример из реальной задачи.

    В URL содержится английское название категории (chairs), а также параметры фильтров width, height.
    https://domain.com/products/chairs?height=200&width=100


    Т.е. нужно отобразить все товары из категории "стулья" (chairs), но не выше 200 и не шире 100, соответственно нам нужно получить и chairs из URL и параметры.

    Роут будет таким в данном случае
    r.HandleFunc("/products/{category_handle}", h.ShowProducts).Methods("GET")


    А в обработчике будет уже вот так
    // из извлекаем из URL категорию
    vars := mux.Vars(r)
    categoryHandle := vars["categoryHandle"]
    
    // получаем параметры
    height, _ := strconv.Atoi(r.URL.Query().Get("height"))
    width, _ := strconv.Atoi(r.URL.Query().Get("width"))
    Ответ написан
    Комментировать
  • Как настроить прием звонков в Telegram на телефон, а не на десктоп?

    @N-Tali
    Сейчас задалась этим вопросом, у меня открыты одновременно на компе телеграм (фоном висит), в браузере и на телефоне, хотелось бы принимать звонки на телефон, а не на десктопную версию. Что-то раньше такого не было, но последнее время звонки упорно идут в браузер или на комп, телефоный телеграм молчит упорно и показывает только уже пропущенные вызовы.

    Нечаянно нашла такую штуку, попробую включить у себя:
    В приложении на телефоне - Настройки - Устройства - Активные сеансы - Выбрать устройство - Отключить пункт "Принимать звонки".

    И проверить что в настройках телефона телеграму разрешены уведомления.
    Ответ написан
    Комментировать
  • Как распарсить json вложенных структур?

    @sciomenihilscire
    Если вы хотите иметь доступ к полям вложенной структуры не указывая названия самой вложенной структуры, тогда вам нужно встроить их в итоговую, а не объявлять одно в другом.
    type Two struct {
    		Two1 string `json:"two_1"`
    		Two2 string `json:"two_2"`
    	}
    
    	type One struct {
    		One1 string `json:"one_1"`
    		One2 string `json:"one_2"`
    	}
    
    	type list struct {
    		One `json:"one"`
    		Two `json:"two"`
    	}
    	
    	
    	data := `[{"one" : { "one_1": "j_1", "one_2": "j_2" }, "two" : { "two_1": "r_1", "two_2": "r_1"}}, {"one" : { "one_1": "j_1", "one_2": "j_2" }, "two" : { "two_1": "r_1", "two_2": "r_1"}}]`
    
    	var lists []list
    	if err := json.Unmarshal([]byte(data), &lists); err != nil {
    		println(err.Error())
    	}
    
    	for _, v := range lists {
    		fmt.Printf("%+v", v.One1)
    		fmt.Printf("%+v", v.Two2)
    	}


    Типа такого
    Ответ написан
    Комментировать
  • Ошибка: package ....... is not in GOROOT. Как решить?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Лучше установить пакет так, как написано в его инструкции.
    Выполните в командной строке
    go get github.com/adshao/go-binance/v2

    Ну и импорт потом вот так
    import (
        "github.com/adshao/go-binance/v2"
    )
    Ответ написан
    2 комментария
  • Как удалить в папке всё, кроме определенной папки?

    @Shetani
    ls | grep -v dir2 | xargs rm -rfv
    команда запускается из папки general
    dir2 - имя папки которую удалять не надо. Так же выведет список удаленных файлов и папок, если этого не нужно, уберите ключ v у команды rm
    Ответ написан
    4 комментария
  • Как удалить в папке всё, кроме определенной папки?

    Tortway
    @Tortway Автор вопроса
    cd /path/to/general; ls | grep -v 'dir-2' | xargs rm -rf
    Ответ написан
    Комментировать
  • Как заставить WebStorm автоматически заворачивать длинные строки?

    miminari13
    @miminari13
    view - active editor - use soft wraps
    это для вебшторма, но думаю в phpstorm тоже самое
    Ответ написан
    3 комментария
  • Почему появляется такая ошибка на PHP?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    - $path = $_SERVER['DOCUMENT_ROOT'];
    - $path .= "./snippets_main/head_main.php";
    + $path = __DIR__ . "/snippets_main/head_main.php";
    Ответ написан
    Комментировать
  • Почему появляется такая ошибка на PHP?

    RNSNS
    @RNSNS
    Symfony Backend developer
    Точку просто убери с пути
    $path = $_SERVER['DOCUMENT_ROOT'];
    $path .= "/snippets_main/head_main.php";

    Ну или
    $path = $_SERVER['DOCUMENT_ROOT'] . "/snippets_main/head_main.php";
    Ответ написан
    Комментировать