ob_start() частично захватывает данные
Я использую следующий код:
PHP:
// Generate Guid
function NewGuid() {
$s = strtoupper(uniqid(rand(),true));
$guidText =
substr($s,0,8) . '-' .
substr($s,8,4) . '-' .
substr($s,12,4). '-' .
substr($s,16,4). '-' .
substr($s,20);
return $guidText;
}
// End Generate Guid
$Guid = NewGuid();
$alphabet = '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';
function base_encode($num, $alphabet) {
$base_count = strlen($alphabet);
$encoded = '';
while ($num >= $base_count) {
$div = $num/$base_count;
$mod = ($num-($base_count*intval($div)));
$encoded = $alphabet[$mod] . $encoded;
$num = intval($div);
}
if ($num) $encoded = $alphabet[$num] . $encoded;
return $encoded;
}
function base_decode($num, $alphabet) {
$decoded = 0;
$multi = 1;
while (strlen($num) > 0) {
$digit = $num[strlen($num)-1];
$decoded += $multi * strpos($alphabet, $digit);
$multi = $multi * strlen($alphabet);
$num = substr($num, 0, -1);
}
return $decoded;
}
// Ob start
ob_start();
echo base_encode($Guid, $alphabet); //should output: bUKpk
$theid = ob_get_contents();
ob_get_clean();
Эта проблема:
Когда я echo $theid
, она показывает полную запись, но, поскольку она вставляется в базу данных, вставляется только первая запись в последовательности, например, для записи buKPK
только "b" вставляется, а не остальные.
2 ответа
Проверьте длину символа в базе данных (т. е. если это varchar(10), убедитесь, что вы храните не более 10 символов в этом поле)
Попробуйте использовать ob_end_clean()
скорее, чем ob_get_clean()
, Последовательные вызовы ob_start() создают "вложенные" контексты буферизации; ob_get_clean()
извлекает и очищает текущий контекст, но не завершает его, поэтому второй вызов ob_start()
создает второй вложенный контекст буферизации В этом случае вы просто хотите захватить выходной буфер и затем завершить контекст захвата.