Я принимаю файл zip в base64 в php скрипте, декодирую и записываю в файл, но после записи, архив не розархивируется. Нужна помощь
<?php
/**
* [unzipToThemesDir unzip template zip file to dir with tempates]
* @param [string] $pathToZIP [path to ZIP]
* @param [string] $pathToTemplates [path to templates dir]
* @return [bool] [true or false]
*/
function unzipToThemesDir($pathToZIP, $pathToTemplates, $theme_name){
mkdir($pathToTemplates . $theme_name, 0777);
$zip = new ZipArchive;
if ($zip->open($pathToZIP) === TRUE) {
$zip->extractTo($pathToTemplates . $theme_name);
$zip->close();
return true;
} else {
return false;
}
}
/**
* [getPathToThemes get path to dir with templates]
* @param [string] $cms_name [cms name]
* @return [string] [path]
*/
function getPathToThemes($cms_name){
$name = strtolower($cms_name);
$path = [
'wordpress' => 'wp-content/themes/'
];
return $path[$name];
}
/**
* [getPathToOurTemplate create path to ZIP]
* @param [string] $path [path to template dir]
* @param [string] $name [theme name]
* @return [string] [path To ZIP]
*/
function getPathToOurZIP($path, $name){
$name = strtolower($name);
$name = explode(' ', $name);
$name = implode('', $name);
return $path . $name . '.zip';
}
/**
* [createZIPfile Create zip archive from base64]
* @param [string] $base64 [zip file in base64]
* @param [string] $path [path to template]
* @return [bool] [true of false]
*/
function createZIPfile($base64, $path){
$zip = bindec(base64_decode($base64));
if(!file_put_contents($path, $zip, FILE_BINARY)){
return false;
}
return true;
}
function getDemoLink($url, $theme_name, $cms_name){
$cms_name = strtolower($cms_name);
if($cms_name == 'wordpress'){
$link = $url . '/?themedemo=' . $theme_name;
}
return $link;
}
function getThemeName($theme_name){
$theme_name = strtolower($theme_name);
$theme_name = explode(' ', $theme_name);
$theme_name = implode('', $theme_name);
return $theme_name;
}
/**
* [run script and display json response]
*/
function run(){
$path = getPathToThemes($_POST['cms_name']);
$theme_name = getThemeName($_POST['theme_name']);
$pathToZIP = getPathToOurZIP($path, $theme_name);
$result = ['err-flag' => false];
if(!createZIPfile($_POST['zip'], $pathToZIP)){
$result['err'] = 'Could not create ZIP';
$result['err-flag'] = true;
}
if(!unzipToThemesDir($pathToZIP, $path, $theme_name)){
$result['err'] = 'Could not unpackege ZIP';
$result['err-flag'] = true;
}
$result['demo-url'] = getDemoLink($_POST['url'], $theme_name, $_POST['cms_name']);
// response
$response = json_encode($result);
file_put_contents('response.txt', $response);
echo($response);
}
run();
Код пересылки zip в base64 скрипту для разпаковки.
public function upload() {
function curl_post($url, array $post = NULL, array $options = array()) {
$defaults = array(
CURLOPT_POST => 1,
CURLOPT_HEADER => 0,
CURLOPT_URL => $url,
CURLOPT_FRESH_CONNECT => 1,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_FORBID_REUSE => 1,
CURLOPT_TIMEOUT => 4,
CURLOPT_POSTFIELDS => http_build_query($post)
);
$ch = curl_init();
curl_setopt_array($ch, ($options + $defaults));
if( ! $result = curl_exec($ch))
{
trigger_error(curl_error($ch));
}
curl_close($ch);
return $result;
}
$data = json_decode(Input::get('data'), true);
$cmsname = DB::table('meta') -> select('meta_value') -> where('id', $data['cms']) -> get();
$cmsname = $cmsname[0] -> meta_value;
$response = curl_post('http://wp/upload-and-demo.php', [
'cms_name' => $cmsname,
'theme_name' => $data['template_name'],
'url' => 'http://wp',
'zip' => $data['zip']
]);
file_put_contents('test.txt', $response);
$response = json_decode($response, true);
// INSERT TO DB
$template_id = DB::table('templates')->insertGetId([
'meta_cms' => $data['cms'],
'date_at_create' => date('Y-m-d H:i:s'),
'date_of_update' => date('Y-m-d H:i:s'),
'link_on_demo' => $response['demo-url'],
'name' => $data['template_name'],
'meta_browsers' => json_encode($data['compatible-browsers']),
'meta_tech' => json_encode($data['compatible-with']),
'meta_file_type' => json_encode($data['file_type']),
'count_column' => $data['column'],
'meta_layout' => $data['layout'],
'description' => $data['description']
]);
foreach($data['keywords'] as $i => $keyword){
DB::table('keywords') -> insert([
'template_id' => $template_id,
'key_name' => $keyword
]);
}
foreach($data['thumbnails'] as $i => $thumb){
DB::table('thumbnails') -> insert([
'template_id' => $template_id,
'src' => $thumb,
'item_index' => $i
]);
}
return 'true';
}
Код отправки zip в base64 на сервер
$.ajax({
method: "PATCH",
url: "upload-template/",
dataType: 'json',
data: {'data' : JSON.stringify(data), '_token' : TOKEN}
}).done(function(msg) {
console.log(msg);
callback();
}).fail(function(msg){
console.log(msg);
fail();
});
Код преобразования zip в base64 на клиенте
var reader = new FileReader();
reader.onload = function(e){
var dataUri = e.target.result;
console.log(file.name);
$('.zip-title').html(file.name);
$('.zip-icon .material-icons').css('display', 'inline-block');
$('.send-and-upload').css('display', 'inline-block');
ZIP = dataUri;
}
reader.readAsDataURL(file);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Добрый вечер! Подскажите как правильно написать код, суть в том мне нужно чтобы так работал: Пример - в базе данных значения:
Добрый день! Как составить отчет по нескольким таблицам? Все записи в таблицы заявки объединяются по году и недели в виде ссылкиНа другой...
Подскажите как собирать сообщения из других сайтов,есть 10 или больше сайтов на которых стоит реклама и на них есть обратная связь и вопрос...