ошибки при десериализации данных, полученных из shell exec в php - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть строка кода ниже, чтобы создать миниатюру изображения разных размеров в фоновом режиме, используя shell_exec.Он работал нормально в сети, но на моем локальном хосте xampp я продолжал получать ошибки ниже в файле журнала.

Примечание: unserialize (): Ошибка по смещению 0 из 182 байтов в C: \ xampp \ htdocs \example.com \ assets \ createImgeThumbnils.php в строке 4 bool (false) Примечание PHP: unserialize (): ошибка по смещению 0 из 182 байтов в C: \ xampp \ htdocs \ example.com \ assets \ createImgeThumbnils.php в строке 4

Вот что у меня есть в моем сценарии загрузки для отправки команды оболочки

<?php
$arg = array ( 
    "dirname" => "gallery/p", 
    "basename" => "878513f88f048477029c8836438773ef-1.jpeg", 
    "extension" => "jpeg", 
    "tag" => 1, 
    "filename" => "878513f88f048477029c8836438773ef-1"
);
$arg = serialize($arg);
shell_exec(
    "C:\xampp\php\php.exe 
    " . __DIR__ . "/../../../assets/createImgeThumbnils.php 
    '".$arg."' 'alert' >> 
    " . __DIR__ . "/../../../server_assets/alert_log/paging.log 2>&1
");

Вот мой пример сценария для createImgeThumbnils.php

<?php
if(isset($argv[1]) && !empty($argv[1])){
    $data = $argv[1];
    //$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $argv[1]);
    var_dump(unserialize($data));
}else{
    echo "NO is empty";
}

Ниже приведены полученные данные, когда я проверяю unserialize($argv)

array(3) {
  [0]=>
  string(130) "C:\xampp\htdocs\example.com\app\test\file_path/../../../assets/createImgeThumbnils.php"
  [1]=>
  string(180) "'a:5:{s:7:dirname;s:9:gallery/p;s:8:basename;s:39:878513f88f048477029c8836438773ef-1.jpeg;s:9:extension;s:4:jpeg;s:3:tag;i:1;s:8:filename;s:34:878513f88f048477029c8836438773ef-1;}'"
  [2]=>
  string(7) "'alert'"
}

1 Ответ

0 голосов
/ 25 ноября 2018

Unserialize жалуется на ведущие одинарные кавычки.Но ваша сериализованная строка также пропускает все двойные кавычки.Поскольку он работал в сети, я думаю, что ваша оболочка на localhost по-разному обрабатывает кавычкиВы можете избежать подобных проблем, если закодируете свои аргументы, например, base64.В вашем первом сценарии:

shell_exec(
  "C:\xampp\php\php.exe 
  " . __DIR__ . "/../../../assets/createImgeThumbnils.php 
  ".base64_encode($arg)." 'alert' >> 
  " . __DIR__ . "/../../../server_assets/alert_log/paging.log 2>&1
");

и во втором сценарии:

$data = base64_decode($argv[1]);
...