Biber,File.pm 第 151 行出现错误消息

Biber,File.pm 第 151 行出现错误消息

我有一个 php 脚本 test.php,它调用 latex+biber:

`/usr/local/texlive/2016/bin/x86_64-linux/latex  --interaction batchmode test.tex `;
`/usr/local/texlive/2016/bin/x86_64-linux/biber  test`;

如果我从终端php test.php(以 root 身份)运行该脚本,则该脚本可以正常工作;从浏览器调用时,它不起作用http://localhost/test.php。在后一种情况下,我理解它是从用户 apache 调用的。(我正在 Linux Fedora 29 机器上进行测试)。

该问题原来与“biber”有关:

[root@fedora-pc]# su -s /bin/bash apache
bash-4.4$ /usr/local/texlive/2016/bin/x86_64-linux/biber test
Can't open test.blg (Permission denied) at /tmp/par-617061636865/cache-975de9a2a2c44ccaa5329d9695a54026ffc29f68/inc/lib/Log/Log4perl/Appender/File.pm line 151.

另外,我刚刚发现

[root@fedora-pc 2019]# /usr/local/texlive/2016/bin/x86_64-linux/tlmgr update --list
/usr/local/texlive/2016/tlpkg/installer/xz/xzdec.x86_64-linux: (stdin): Unexpected end of input

[root@fedora-pc 2019]# tlmgr update --self
/usr/local/texlive/2016/tlpkg/installer/xz/xzdec.x86_64-linux: (stdin): Unexpected end of input
/usr/local/texlive/2016/bin/x86_64-linux/tlmgr: checksum error when downloading /tmp/WQEchRh21D/TzyO2wJ8pA from http://ftp.rrze.uni-erlangen.de/ctan/systems/texlive/tlnet/tlpkg/texlive.tlpdb: digest disagree

我不太了解 LaTex,不知道发生了什么事以及如何修复它。(biber 是 2.9 版本)

答案1

Linux Fedora 29,4.19.12-301.fc29.x86_64;pdfTeX,版本 3.14159265-2.6-1.40.19(TeX Live 2018)(我已更新)

当我将以下行添加到 sudoers 文件时,我的问题得到了解决:

apache ALL=(ALL:ALL) NOPASSWD:/usr/local/texlive/2018/bin/x86_64-linux/biber

我的脚本test.php是:

<?php

$NomeFile = 'test';
$bibFile = $NomeFile;
$texFile = $NomeFile.".tex";
$pdfFile = $NomeFile.".pdf";
$f=fopen($texFile,'w');

            $header ="\\documentclass{article} \n ";
            $header.="\\usepackage[latin1]{inputenc} \n ";
            $header.="\\usepackage[T1]{fontenc} \n ";
            $header.="\\usepackage[american,italian]{babel} \n ";
            $header.="\\usepackage[babel,italian=guillemets]{csquotes} \n ";
            $header.="\\usepackage[backend=biber,sorting=ynt]{biblatex}\n";
            $header.="\\usepackage[pdftex]{hyperref} \n ";

            $header.= "\\bibliography{".$bibFile."}";
            $header.="\\begin{document} \n ";

            $f=fopen($NomeFile.'.tex','w');
            fputs($f,$header);

fputs($f,"\\cite{Mario}"); 
$printbib = '\\printbibliography';
fputs($f,$printbib);
fputs($f,"\\end{document}");
fclose($f);

$filenameTeX = $NomeFile.'.tex'; 
$test_2 = `/usr/local/texlive/2018/bin/x86_64-linux/pdflatex  --interaction batchmode $texFile `;
$test_3 = `sudo -u root /usr/local/texlive/2018/bin/x86_64-linux/biber  $bibFile `;
$test_4 = `/usr/local/texlive/2018/bin/x86_64-linux/pdflatex  --interaction batchmode $texFile `;

$filenamePdf = $NomeFile.'.pdf'; 
echo "2 <pre>$test_2</pre>";
echo "3 <pre>$test_3</pre>";
echo "4 <pre>$test_4</pre>";
echo "<br><a href=\"$filenamePdf\">$filenamePdf</a>";
echo "<br><a href=\"$filenameTeX\">$filenameTeX</a>";
?>

我的 .bib 文件

@BOOK{Mario,
  author =      {Mario Doe},
  title =       {TITLE},
  publisher =   {My Pubblisher},
  location =    {World},
  year =        {2025} 
 }

我也已设置PAR_GLOBAL_TEMP=\var\www\tmptmp归用户所有apache,但没有帮助。

我的浏览器调用http://localhost/test.php会产生所需的test.tex 文件test.pdf,包括参考书目。/var/www/tmp/仍然是空的。如果我尝试[root@....]# php test.php

[root@...]# su -s /bin/bash apache
bash-4.4$ php test.php

请注意,如果我稍后编译 .tex 文件,则会/var/www/tmp/被多个文件污染,主要是在inc子目录中。

我不确定这是最好的解决方案,但在本地设置下它仍然对我有用。

相关内容