PHP Foreach и JQuery - PullRequest
       6

PHP Foreach и JQuery

0 голосов
/ 30 марта 2011

Я работаю над фрагментом кода, который я хочу "оживить" с помощью jQuery, но я не могу придумать, как на самом деле заставить его работать. Я уверен, что все просто, мне просто нужен небольшой совет, чтобы я начал работать.

Я хочу создать фрагмент кода, который отправляет Ajax-запрос, чтобы запустить большой цикл, который будет загружать файлы, а затем загружать их в мое хранилище S3. Я застрял в том месте, где я хочу отправлять запрос обратно в браузер при каждой загрузке файла и выводить текстовую строку на экран после завершения.

У меня не работает ни один из кодов внешнего интерфейса ... просто сначала я пытаюсь обернуть голову вокруг логики ... есть идеи?

Код внутреннего кода PHP:

<?php
    public function photos($city) {
        if(isset($city))
            $this->city_name = "{$city}";

        // grab data array from Dropbox folder
        $postcard_assets = $this->conn->getPostcardDirContent("{$this->city_name}", "Photos", TRUE);
        $data = array();

        foreach($postcard_assets['contents'] as $asset) {
            //only grab contents in root folder... do not traverse into sub folders && make sure the folder is not empty
            if(!$asset['is_dir'] && $asset['bytes'] > 0) {
                // get information on file
                $file = pathinfo($asset['path']);

                // download file from Dropbox
                $original_file = $this->conn->downloadFile(str_replace(" ", "%20", $asset['path']));

                // create file name
                $file_name = $this->cleanFileName($file['basename']);

                // write photo to TMP_DIR ("/tmp/photos/") for manipulation
                $fh = fopen(self::TMP_DIR . $file_name, 'w');
                fwrite($fh, $original_file);
                fclose($fh);

                // Resize photo
                $this->resize_photo($file_name);

                // hash file name
                $raw_file = sha1($file_name);
                // create S3 hashed name
                $s3_file_name = "1_{$raw_file}.{$file['extension']}";
                // Upload manipulated file to S3
                $this->s3->putObject($s3_file_name, file_get_contents(self::TMP_DIR . $file_name), $this->photo_s3_bucket, 'public-read');

                // check to see if file exists in S3 bucket
                $s3_check = $this->s3->getObjectInfo($s3_file_name, $this->photo_s3_bucket);

                // if the file uploaded successully to S3, load into DB
                if($s3_check['content-length'] > 0) {
                    $data['src'] = $s3_file_name;
                    $data['width'] = $this->width;
                    $data['height'] = $this->height;
                    Photo::create_postcard_photo($data, "{$this->city_name}");
                    // Now that the photo has been uploaded to S3 and saved in the DB, remove local file for cleanup
                    unlink(self::TMP_DIR . $file_name);
                    echo "{$file_name} uploaded to S3 and resized!<br />";
                }
            }
        }
        // after loop is complete, kill script or nasty PHP header warnings will appear
        exit();
    }
?>

1 Ответ

2 голосов
/ 30 марта 2011

Основная проблема в том, что в PHP выходные данные буферизуются, поэтому они не возвращают строку за раз.Вы можете попытаться принудительно выполнить сброс, но это не всегда надежно.

Вы можете добавить запись в БД для каждого файла, которым обмениваются, и создать отдельный API, чтобы получить подробную информацию о том, что завершено.

Как правило, Jquery будет ждать завершения запроса, прежде чем он позволит вам манипулировать данными из HTTP-запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...