Ждать стоимость return в перекурсивных функциях

Это мой код:

<?php
    class almacenar{
        private $lista_imagenes;
        private $indice;
        private $total_imagenes;
        private $links;
        function __construct($lista_imagenes){
            $this->lista_imagenes = $lista_imagenes;
            $this->indice = 0;
            $this->total_imagenes = count($lista_imagenes);
            $this->links = array();
        }
        function subir_imagenes(){          
            $url_archivo = '../../img/subidas/' . $this->lista_imagenes[$this->indice];
//aqui omito algunas lineas donde valido la existencia del archivo
            (new clsbucket)->upload(
                $archivo,
                [
                    'name' => 'uploads/app/' . $nombre_archivo,
                    'resumable' => false,
                    'uploadProgressCallback' => self::finalizar_subida($nombre_archivo)
                ]
            );
            return $this->links;
        }
        function finalizar_subida($nombre_archivo){
            $this->indice = $this->indice + 1;
            $this->links[] = $nombre_archivo;
            if ($this->indice < $this->total_imagenes) {
                self::subir_imagenes();
            }
        }
    }
?>

Когда я выполняю призыв к моему коду:

$arraydemo = array('12_03_2019_17_37_35.jpg', '12_03_2019_15_29_46.jpg', '12_03_2019_15_26_39.jpg');

    $subir = new clsGoogleStorage($arraydemo);
    $info = $subir->subir_imagenes();

    echo json_encode($info);

я получаю следующий результат:

["12_03_2019_17_37_35.jpg","12_03_2019_15_29_46.jpg","12_03_2019_15_26_39.jpg"]

Который быть должен говорить правду, это ожидаемый результат, но: porqué я получаю этот результат?: porqué жди, в который callback и все так называемые переиталики finalize перед тем, как возвращать стоимость в return $this->links;?: всегда я получу ожидаемую стоимость?: если хотят зазнаться слишком много изображений, подвергаются риску разрушения?. Может быть я не формулирую хорошо мой вопрос, или он дает основание для мнений, но я новый в php и согласно моей логике return $this->links; он был бы должен работать немедленно после (new clsbucket)->upload(...);.

0
задан 19.03.2019, 21:51
1 ответ

Jejeje... ты estГЎs путая с языком сценариев JavaScript :-D

PHP - полностью последовательные и sГ-ncrono ; любой operaciГіn, что ты реализовал , он останавливает cГіdigo до тех пор, пока счастье operaciГіn не закончится.

ВїporquГ© ждет, в который callback...

OlvГ - Датировал callbacks ; эта концепция не является применимой . ВЎ Это PHP!

Вїsi хотят зазнаться слишком много imГЎgenes, подвергаются риску разрушения?.

Разрушаться не... просто, если intГ©rprete замечание, что твои рукописный шрифт медлит слишком много времени с тем, чтобы работать, это detendrГЎ. Это время mГЎximo ejecuciГіn устанавливается в php.ini:

max_execution_time:
Восток стоимость устанавливает время mГЎximo в секундах, которые позволено выполнять до того, как анализатор закончился. Он помогает этому предотвращать, что scripts плохой сочинения блокировали сервер. Стандартной настройки 30. Когда работает PHP с нее lГ-nea команд, стандартной настройки 0.

Конечно, у этого есть цена : из-за каждый peticiГіn, PHP выполняешь ты cГіdigo и не для до тех пор, пока он это не заканчивает... , не могут обслуживать другие просьбы . Как следствие, это не Гіptimo для сред со много груз: не tendrГЎs mГЎs средство защиты, которое должно увеличивать хардвер.

Это буквально не является верным ; сами ВЕБ серверы и услуга fpm распространяют просьбы между верным nГєmero трэдов или процессов, но последовательность - та же самая: заканчивать с одной peticiГіn перед тем, как принимать другую.

1
ответ дан 02.12.2019, 05:27

Теги

Похожие вопросы