Ответы пользователя по тегу PHP
  • Как настроить коммуникацию между двумя Docker Compose проектами на одной машине по HTTP?

    another_dream
    @another_dream Автор вопроса
    Backend-разработчик, Laravel/ZF2/Yii2
    Реализовать задуманное можно с помощью прокси.
    В самом примитивном варианте это будет что-то вроде nginx-proxy.
    Можно так же использовать Traefik, но с ним не задалось, так как почему-то всегда один из хостов поставлялся с авто-балансировкой в зависимости от того, какой компоуз был поднят первым (если api, то api.local отвечал всегда с нужного сервиса, а front.local постоянно переключался то на api, то на front сервис, балансируя между ними), проблему не смог решить и пошёл более простым способом -- воспользовался nginx-proxy.
    Если кто знает как правильно сконфигурировать Traefik, чтобы не возникло этой проблемы с балансировкой -- отпишите в комментарии.

    Nginx Proxy запускается так же в Докере, как контейнер, можно через docker-compose:
    version: '3'
    
    services:
      nginx-proxy:
        image: jwilder/nginx-proxy
        container_name: nginx-proxy
        ports:
          - "80:80"
        networks:
          - proxy
        volumes:
          - /var/run/docker.sock:/tmp/docker.sock:ro
    
    networks:
      proxy:
        driver: bridge
    # вне этого docker-compose.yml сеть будет доступна по имени {директория}_proxy, в моём случае это nginx_proxy


    Конфигурация Docker Compose для хостов (описано только самое важное):
    # ...
    services:
      # Web server
      web:
        image: nginx
        environment:
          - 'VIRTUAL_HOST=${NGINX_HOST}' # подтягиваем из конфигурации окружения (.env, NGINX_HOST=api.local)
        networks:
           nginx_proxy: # чтобы наш хостовый nginx мог достучаться по общей с прокси сети до других контейнеров в той же сети
               aliases:
                   - ${NGINX_HOST} # указываем алиас, по которому будет доступен контейнер, в моём случае это локальный хост api.local
           default: # дефолтная сеть, чтобы не ломать связь внутри текущей Docker Compose конфигурации
    
      # PHP
      php:
        image: php
        networks:
          - nginx_proxy # возможность из PHP иметь доступ к общей прокси сети, чтобы взаимодействовать с другими хостами
          - default
    
    networks:
      nginx_proxy: # возьмём сеть извне
        external: true

    Примерно повторяем конфигурирование для front-сервиса.
    Сначала стартуем прокси, потом уже хосты.
    Теперь хост front.local может обратиться к api.local по имени хоста (например, curl или file_get_contents('http://api.local/')).
    Ответ написан
    Комментировать
  • Из за чего не работает корректно парсинг?

    another_dream
    @another_dream
    Backend-разработчик, Laravel/ZF2/Yii2
    Проверяйте после
    foreach (($table_header->children) as $num => $th_row) {
                //  echo "FIRST foreach<br>";
                //var_dump($th_row->plaintext);
                //var_dump($num);
                switch(trim($th_row->plaintext)){
                    case 'Наименование':
                   // case 'Наименование светильника':
                        $numer["name"] = $num;
                        break;
                    case 'Фото':
                    case 'Изображение':
                        $numer['image'] = $num;
                        break;
                    case 'Артикул':
                        $numer['model'] = $num;
                        break;
                }
    
            }

    Что содержится в $numer (дамп) и смотрите, корректно ли все обрабатывается.
    Дальше проходите к циклу foreach ($arr_of_tl as $num => $value) {...}
    Внутри него тоже проверяйте данные, к примеру - $num и $value.

    А вообще - не стоит велосипедить подобные конструкции, смотрите готовые пакеты и используйте их. Composer установить и подключить autoload - дело двух минут.
    Ответ написан
    Комментировать
  • Почему код себя так странно ведет?

    another_dream
    @another_dream Автор вопроса
    Backend-разработчик, Laravel/ZF2/Yii2
    Проблема решена. В одном из мест вызывался тот же метод и там приходил 0, из-за чего сессия не писалась, так как "невалидно". Всем спасибо.
    Ответ написан
    Комментировать
  • Почему не корректно пишутся данные в сессии?

    another_dream
    @another_dream Автор вопроса
    Backend-разработчик, Laravel/ZF2/Yii2
    Все дело было в htmlentities. Было написано без кодировки. Указал кодировку(htmlentities($_POST['comment'], ENT_QUOTES, "UTF-8")) и все заработало. Спасибо :)
    Ответ написан
    Комментировать
  • Как правильно обработать jQuery AJAX результат?

    another_dream
    @another_dream Автор вопроса
    Backend-разработчик, Laravel/ZF2/Yii2
    echo json_encode($times);
    jQuery.ajax({
                type: "POST",
                url: "/function/checkTime.php",
                data: ({date:date}),
                dataType:"text",
                success: function(data) {
                    console.log(data);
        }
    });

    Сервер вернул:
    {"0":"1","id":"1","1":"2014-05-24","date":"2014-05-24","2":"16:00","time_start":"16:00","3":"17:00","time_end":"17:00"}

    Как теперь можно обратиться к определенному элементу в этом массиве/объекте? К примеру, alert(data.id) -- не срабатывает :(
    Ответ написан
  • Как, без перезагрузки страницы, передать значение из JS в PHP?

    another_dream
    @another_dream Автор вопроса
    Backend-разработчик, Laravel/ZF2/Yii2
    $.ajax({
      type: 'POST',
      url: 'response.php?action=sample2',
      data: 'name=Andrew&nickname=Aramis',
      success: function(data){
        $('.results').html(data);
      }
    });

    Пример, как можно реализовать. PHP скрипт получит POST данные(name и nickname). Дальше обработка и возвращение результата. Верно?
    Ответ написан
    Комментировать
  • Как обработать запрос к серверу с помощью AJAX/jQuery/JS?

    another_dream
    @another_dream Автор вопроса
    Backend-разработчик, Laravel/ZF2/Yii2
    А если Я скажу, что все это должно обращаться к классу? Здесь CMS. И архитектура не позволяет обращаться напрямую к скрипту. Как-то через классы. В классе уже функция, которой нужно передать параметры $_POST'ов
    Ответ написан
  • Почему функция возвращает NULL вместо массива?

    another_dream
    @another_dream Автор вопроса
    Backend-разработчик, Laravel/ZF2/Yii2
    Хм, решилось все просто, но несколько не понятно для меня :
    //ACTION:
    $sql = fetchQuery($queryConstruct, $query, $fetchType);

    Почему нужно было занести вызов функции в переменную, ведь при выполнении, фун-я должна возвращать значение, в моем случае $sql? Я не понял.
    Ответ написан
  • Почему функция возвращает NULL вместо массива?

    another_dream
    @another_dream Автор вопроса
    Backend-разработчик, Laravel/ZF2/Yii2
    Одна странность. Если переопределить переменную в функции - она все также возвращает NULL
    Ответ написан
    Комментировать
  • Как сделать запрос к базе в этом случае?

    another_dream
    @another_dream Автор вопроса
    Backend-разработчик, Laravel/ZF2/Yii2
    И сразу возник еще один вопрос.
    Сделал:
    ....
    public function dbConnect() {
            ...
            ...
            return $db;
    	}
    }

    и далее
    $db = $testConnect->dbConnect();
    $sql = $db->query('SELECT name FROM qwert');
    print_r($sql);

    С чего вдруг SQL-запрос возвращает:
    mysqli_result Object ( [current_field] => 0 [field_count] => 1 [lengths] => [num_rows] => 1 [type] => 0 )
    Ответ написан
    Комментировать
  • Как правильно составить запрос к БД?

    another_dream
    @another_dream Автор вопроса
    Backend-разработчик, Laravel/ZF2/Yii2
    $result = $mysqli->query("SELECT * FROM entry WHERE descr LIKE %$query% OR content LIKE %$query% OR title LIKE %$query%");

    Мой вариант, но выборка не происходит. $result возвращается пустой.
    Ответ написан
    Комментировать
  • Почему вот этот код не работает? Где тут проблема?

    another_dream
    @another_dream Автор вопроса
    Backend-разработчик, Laravel/ZF2/Yii2
    В общем. Все сделал. Вот как надо было
    <?php if (isset($_GET['add-entry'])): ?>
    <br />
    <center>
        <form method="POST" action ="/admin/admin.php";
        <label>Название</label>
        <input type="text" name="name"><br />
        <label>Юридическое название</label>
        <input type="text" name="ur_name"><br />
        <label>Дата запуска проекта</label>
        <input type="date" name="startdate"><br />
        <label>Общий приход</label>
        <input type="text" name="globalinput"><br />
        <label>Общий расход</label>
        <input type="text" name="globaloutput"><br />
        <input type="submit" name="submit" value="Добавить"><br />
        </form>
    </center>
    <?php endif ?>
    <?php
        if ($_POST['submit']==true) {
            $name = $_POST['name'];
            $ur_name= $_POST['ur_name'];
            $startdate = $_POST['startdate'];
            $globalinput = $_POST['globalinput'];
            $globaloutput = $_POST['globaloutput'];
    
            $mysqli->query("INSERT INTO projects VALUES(0,'$name','$ur_name','$startdate','$globalinput','$globaloutput')") or die ("Your bunny wrote, ne dobavlyaet! >_<");
    }
        ?>
    Ответ написан
    Комментировать
  • Как реализовать загрузку файлов на сервер [php/apache]?

    another_dream
    @another_dream Автор вопроса
    Backend-разработчик, Laravel/ZF2/Yii2
    ?php
    
    $name=$_POST['name'];
    $score=$_POST['score'];
    $uploads_dir = '/images';
    $tmp_name = $_FILES["screenshot"]["tmp_name"];
    $name = $_FILES["screenshot"]["name"];
    move_uploaded_file($tmp_name, "$uploads_dir/$name");
    
    if ($_POST['submit']==true) {
    	$mysqli->query("INSERT INTO guitar VALUES(0, NOW(), '$name', '$score', '$pic')"); 
    } 
    ?>

    Папка существует. Все идеально для выполнения. Но все тот же:
    Warning: move_uploaded_file(/images/WIN_20131204_232139.JPG) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\srv\OpenServer\domains\localhost\tmp\addscore.php on line 35

    Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'H:\php49F4.tmp' to '/images/WIN_20131204_232139.JPG' in C:\srv\OpenServer\domains\localhost\tmp\addscore.php on line 35
    Ответ написан
  • Как реализовать загрузку файлов на сервер [php/apache]?

    another_dream
    @another_dream Автор вопроса
    Backend-разработчик, Laravel/ZF2/Yii2
    Хм...как Я понимаю, при попытке перемещения он ругается:
    Warning: move_uploaded_file(C:/srv/OpenServer/domains/localhost/images/) [function.move-uploaded-file]: failed to open stream: Permission denied in C:\srv\OpenServer\domains\localhost\tmp\addscore.php on line 29

    Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'H:\phpABBE.tmp' to 'C:/srv/OpenServer/domains/localhost/images/' in C:\srv\OpenServer\domains\localhost\tmp\addscore.php on line 29
    Ответ написан
  • Как реализовать загрузку файлов на сервер [php/apache]?

    another_dream
    @another_dream Автор вопроса
    Backend-разработчик, Laravel/ZF2/Yii2
    @Nc_Soft , пожалуйста:
    Array ( [screenshot] => Array ( [name] => WIN_20131201_052047.JPG [type] => image/jpeg [tmp_name] => H:\phpB65.tmp [error] => 0 [size] => 122294 ) )
    Ответ написан
  • Как реализовать загрузку файлов на сервер [php/apache]?

    another_dream
    @another_dream Автор вопроса
    Backend-разработчик, Laravel/ZF2/Yii2
    string(14) "H:\phpEB58.tmp"
    Он так и должен сохранять файл или же имя должно соотвествовать файлу?
    Ответ написан
    Комментировать
  • Как реализовать загрузку файлов на сервер [php/apache]?

    another_dream
    @another_dream Автор вопроса
    Backend-разработчик, Laravel/ZF2/Yii2
    <?php
    define('GW_UPLOADPATH', 'images/');
    $name=$_POST['name'];
    $score=$_POST['score'];
    $pic = $_FILES['screenshot'];
    $pic=move_uploaded_file($_FILES['screenshot'], GW_UPLOADPATH);
    ?>

    Все верно? Файл забирается из формы, обрабатывается в PHP, переносится из временной в /images/ директорию, верно?
    Но дамп "$pic" говорит:
    bool(false)
    Ответ написан