fix(uoj/1/app/libs): fix no preview of text files in problem_data_manage

When managing data, there will be a preview of test data or validator binary file.
But in PHP7 the prefiew of test data text file or problem.conf text file is not shown.
After my test it is caused by file_get_contents() when passing offset with -1.
It is strange that the manual on php.net in Chinese the default of $offset is -1,
but in English the default of $offset is 0. Use -1 will get nothing, 0 instead is fine.
The commit also change uojFilePreview() that can also be used as viewing binary file.
For backwards compatibility, we just set text as the default file type and no need to specify.
This commit is contained in:
Masco Skray 2018-10-11 23:01:50 +08:00
parent 58e70164ba
commit c1294121d3
2 changed files with 8 additions and 3 deletions

View File

@ -65,7 +65,7 @@ EOD;
if (strStartWith($mimetype, 'text/')) { if (strStartWith($mimetype, 'text/')) {
echo htmlspecialchars(uojFilePreview($file_full_name, $output_limit)); echo htmlspecialchars(uojFilePreview($file_full_name, $output_limit));
} else { } else {
echo htmlspecialchars(strOmit(shell_exec('xxd -g 4 -l 5000 ' . escapeshellarg($file_full_name) . ' | head -c ' . ($output_limit + 4)), $output_limit)); echo htmlspecialchars(uojFilePreview($file_full_name, $output_limit, 'binary'));
} }
echo "\n</pre>"; echo "\n</pre>";
} }

View File

@ -24,8 +24,13 @@ function uojHandleAtSign($str, $uri) {
return array($res, $referrers_list); return array($res, $referrers_list);
} }
function uojFilePreview($file_name, $output_limit) { function uojFilePreview($file_name, $output_limit, $file_type = 'text') {
return strOmit(file_get_contents($file_name, false, null, -1, $output_limit + 4), $output_limit); switch ($file_type) {
case 'text':
return strOmit(file_get_contents($file_name, false, null, 0, $output_limit + 4), $output_limit);
default:
return strOmit(shell_exec('xxd -g 4 -l 5000 ' . escapeshellarg($file_name) . ' | head -c ' . ($output_limit + 4)), $output_limit);
}
} }
function uojIncludeView($name, $view_params = array()) { function uojIncludeView($name, $view_params = array()) {