Рубрики
Uncategorized

Публикация моего блога с использованием HTTP-загрузки на PHP

После упорной борьбы с Трэвисом и моим FTP-сервером я решил использовать HTTP-загрузку. Помеченный php, javascript, веб-сайт, развертывание.

создание личной страницы (Серия из 7 частей)

В прошлой статье я писал о том, как опубликовать веб-сайт с помощью travis и FTP. Сначала все казалось прекрасным, но ночная сборка внезапно провалилась. Прошло много времени, пока я не понял, что это не из-за моего кода или моего ftp-сервера но из-за того, как Трэвис настроил свои сетевые уровни. Читайте здесь, если вам интересно: Читайте здесь, если вам интересно:

Но борьба еще не проиграна! Мой пакет веб-пространства включает экземпляр PHP, и поэтому я могу написать небольшой инструмент для загрузки HTTP. Я думаю, что это немного великовато, но это позволяет мне продолжать использовать мой пакет веб-пространства.

Как мне не стыдно, прошло много времени с тех пор, как я программировал PHP. Поэтому я предполагаю, что следующий код написан очень быстро и грязно.

Сначала мне нужен метод для чтения HTTP Заголовок для проверки секрета, который я отправляю вместе с запросом.

// code/upload.php#L3-L19

function getRequestHeaders() {
    $headers = array();
    foreach($_SERVER as $key => $value) {
        if (substr($key, 0, 5) <> 'HTTP_') {
            continue;
        }
        $header = str_replace(' ', '-', ucwords(str_replace('_', ' ', strtolower(substr($key, 5)))));
        $headers[$header] = $value;
    }
    return $headers;
}

$headers = getRequestHeaders();

if ($headers['Secret'] !== "") {
    die("wrong secret");
}

Доступ к файлу можно получить с помощью $_FILES . Чтобы сохранить изображение где-нибудь, используйте move_uploaded_file .

// code/upload.php#L21-L22

move_uploaded_file($_FILES['zip-file']['tmp_name'], './'.$_FILES['zip-file']['name']);

Это очень просто, но должно быть достаточно для приема файлов из любого места. Чтобы ускорить процесс загрузки, я переместил весь /расстояние каталог в ZIP-архив. Поэтому мне нужно распаковать его с помощью PHP:

// code/upload.php#L23-L30

$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
    $zip->extractTo('./');
    $zip->close();
    echo 'ok';
} else {
    echo 'error duringunzip';
}

Для архивирования файлов я использую архиватор и для отправки запроса на загрузку запрос .

архиватор очень прост и требует всего нескольких строк кода:

// code/zip.js

var fs = require('fs');
var archiver = require('archiver');

var fileName =   'test.zip'
var fileOutput = fs.createWriteStream(fileName);
const archive = archiver('zip');

fileOutput.on('close', function () {
    console.log(archive.pointer() + ' total bytes');
    console.log('archiver has been finalized and the output file descriptor has closed.');
});

archive.pipe(fileOutput);
archive.directory('dist/', false);
archive.on('error', function(err){
    throw err;
});
archive.finalize();

Отправка файла также очень проста и выполняется быстро:

// code/send.js

const request = require("request");
const fs = require("fs");
const path = require("path");
var options = {
    url: 'https://biehler-josef.de/upload.php',
    headers: {
        secret: process.env.JB_UPLOAD_SECRET
    }
}
var r = request.post(options, function optionalCallback (err, httpResponse, body) {
  console.log('Server responded with:', body, err);
})
var form = r.form()
form.append('zip-file', fs.createReadStream(path.join(__dirname, "..", 'test.zip')))

Я заменил развертывание FTP конечной точкой загрузки HTTP. Тот /расстояние каталог архивируется и разархивируется с помощью php . Это было необходимо, потому что загрузка по FTP не очень хорошо работает с Трэвисом.

Поскольку я не являюсь носителем английского языка, очень вероятно, что вы обнаружите ошибку. В этом случае, не стесняйтесь создавать запрос на извлечение здесь: https://github.com/gabbersepp/dev.to-posts . Также, пожалуйста, откройте PR для всех других видов ошибок.

Не беспокойтесь о конфликтах слияния. Я решу их самостоятельно.

создание личной страницы (Серия из 7 частей)

Оригинал: “https://dev.to/gabbersepp/publishing-my-blog-using-http-upload-in-php-3aj7”