Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HTMLDOC不从PHP执行_Php_Htmldoc - Fatal编程技术网

HTMLDOC不从PHP执行

HTMLDOC不从PHP执行,php,htmldoc,Php,Htmldoc,我试图从一个PHP页面(Apache,LAMP)的HTML文件中创建一个PDF,但事实是,当我从命令行执行脚本时,它可以正常工作并按预期创建PDF。但是,当我在浏览器中浏览到该页面时,它什么也不做。我想这是某个地方的权限问题,但我被难住了!这是密码。(注意ls命令确实在浏览器中生成输出,因此这不仅仅是不允许PHP执行shell命令的问题) 当我在Chrome中浏览页面时,它只输出LS命令 救命 您可以尝试使用完整路径作为php文件,该文件将在不同的目录中执行,而不是保存在不同的目录中,具体取决于

我试图从一个PHP页面(Apache,LAMP)的HTML文件中创建一个PDF,但事实是,当我从命令行执行脚本时,它可以正常工作并按预期创建PDF。但是,当我在浏览器中浏览到该页面时,它什么也不做。我想这是某个地方的权限问题,但我被难住了!这是密码。(注意ls命令确实在浏览器中生成输出,因此这不仅仅是不允许PHP执行shell命令的问题)

当我在Chrome中浏览页面时,它只输出LS命令


救命

您可以尝试使用完整路径作为php文件,该文件将在不同的目录中执行,而不是保存在不同的目录中,具体取决于加载方式。(即通过
include
require
.htaccess
或直接由apache提供。)


我同意这样的评论,即使用类似或最好的包。

您可以尝试使用完整路径作为php文件在不同的目录中执行,而不是保存在不同的目录中,具体取决于加载方式。(即通过
include
require
.htaccess
或直接由apache提供。)


我同意这样的评论,即使用类似或最好的软件包。

我也看到过同样的问题,在我的一生中,我根本无法从基于web的调用中找到为什么它不能做到这一点的答案,但从命令行中从来没有遇到过问题。因此,我创建了一个Perl代理,以允许我从命令行解析PDF,从而使它对几乎任何给定的用途都有用,而不是在这方面为解决方案而奋斗。因为,使用Perl,我从来没有遇到过解析PDF的问题,而且我已经做了几十年了

这就是你要做的。PHP代码:

exec("/usr/local/bin/perl5 -s /path/to/perl/executable/parse-pdf-from-html-document.pl -source=markup-file.html",$output);

foreach ($output as $aline) {
    #- WAS SUCCESSFUL
    if (strstr($aline,'Successful!') == TRUE) {
        #- no feedback, win silently
    }
    #- NOT SUCCESSFUL
    else {
        echo $aline . "\n";
    }
}
使用
$output
保存运行exec的结果

现在让我们看一下parse-pdf-from-html-document.pl的Perl代码:

#!/usr/local/bin/perl5 -s

#- $document coming from commandline variable, via caller: PHP script
$myDocumentLocale = "/path/to/markup/document/".$document;
if (-e $myDocumentLocale) {
    $documentHTML = $myDocumentLocale;
    $documentPDF = $documentHTML;
    $documentPDF =~ s/\.html/\.pdf/gi;

    $myDocumentHTML = `cat $myDocumentLocale`;

    $badPDF = 0;
    $myPDFDocumentLocale = $myDocumentLocale;
    $myPDFDocumentLocale =~ s/\.html/\.pdf/gi;
    $badPDF = &parsePDF($myDocumentLocale, $myPDFDocumentLocale);

    if ($badPDF == 0) {
        print "Successful!";
    }
    else {
        print "Error: No PDF Created.";
    }
    exit;

    }
else {
    print "Error: No document found.";
    exit;
}

sub parsePDF {
    my ($Ihtml, $Ipdf) = @_;
    $wasBad = 0;

    #- create PDF
    $ENV{HTMLDOC_NOCGI} = 1;
    $commandline="/usr/local/bin/htmldoc -t pdf13 --pagemode document --header ... --footer ... --left 1cm --size Letter --webpage -f $Ipdf $Ihtml";
    select(STDOUT); 
    $| = 1;
    #print "Content-Type: application/pdf\n\n";
    system($commandline);
    if (-e $Ipdf) {
        $wasBad = 0;
    }
    else {
        $wasBad = 1;
    }
    return $wasBad;
}

exit;

我也看到过同样的问题,就我的一生而言,我根本无法从基于web的调用中找到为什么它不能做到这一点的答案,但从命令行中从来没有遇到过问题。因此,我创建了一个Perl代理,以允许我从命令行解析PDF,从而使它对几乎任何给定的用途都有用,而不是在这方面为解决方案而奋斗。因为,使用Perl,我从来没有遇到过解析PDF的问题,而且我已经做了几十年了

这就是你要做的。PHP代码:

exec("/usr/local/bin/perl5 -s /path/to/perl/executable/parse-pdf-from-html-document.pl -source=markup-file.html",$output);

foreach ($output as $aline) {
    #- WAS SUCCESSFUL
    if (strstr($aline,'Successful!') == TRUE) {
        #- no feedback, win silently
    }
    #- NOT SUCCESSFUL
    else {
        echo $aline . "\n";
    }
}
使用
$output
保存运行exec的结果

现在让我们看一下parse-pdf-from-html-document.pl的Perl代码:

#!/usr/local/bin/perl5 -s

#- $document coming from commandline variable, via caller: PHP script
$myDocumentLocale = "/path/to/markup/document/".$document;
if (-e $myDocumentLocale) {
    $documentHTML = $myDocumentLocale;
    $documentPDF = $documentHTML;
    $documentPDF =~ s/\.html/\.pdf/gi;

    $myDocumentHTML = `cat $myDocumentLocale`;

    $badPDF = 0;
    $myPDFDocumentLocale = $myDocumentLocale;
    $myPDFDocumentLocale =~ s/\.html/\.pdf/gi;
    $badPDF = &parsePDF($myDocumentLocale, $myPDFDocumentLocale);

    if ($badPDF == 0) {
        print "Successful!";
    }
    else {
        print "Error: No PDF Created.";
    }
    exit;

    }
else {
    print "Error: No document found.";
    exit;
}

sub parsePDF {
    my ($Ihtml, $Ipdf) = @_;
    $wasBad = 0;

    #- create PDF
    $ENV{HTMLDOC_NOCGI} = 1;
    $commandline="/usr/local/bin/htmldoc -t pdf13 --pagemode document --header ... --footer ... --left 1cm --size Letter --webpage -f $Ipdf $Ihtml";
    select(STDOUT); 
    $| = 1;
    #print "Content-Type: application/pdf\n\n";
    system($commandline);
    if (-e $Ipdf) {
        $wasBad = 0;
    }
    else {
        $wasBad = 1;
    }
    return $wasBad;
}

exit;

此外,我将output2目录更改为apache:apache,并将其更改为777,我认为这可能就是问题所在。还是不行。它可以很好地编写html文件,但不能编写PDF文件?还是Apache版本?@AlexRussell:这并不是解决您问题的好办法,但是如果您想用PHP将HTML转换为PDF,可以看看DOMPDF或(尽管在这方面相当有限)TCPDF。执行shell命令是肮脏的,不完全是可移植的。lxg,伟大的思想是一样的!我只是想把它切换到domPDF可能是最好的方法。另外,我把output2目录改为apache:apache,并把它改为777,我想这可能就是问题所在。还是不行。它可以很好地编写html文件,但不能编写PDF文件?还是Apache版本?@AlexRussell:这并不是解决您问题的好办法,但是如果您想用PHP将HTML转换为PDF,可以看看DOMPDF或(尽管在这方面相当有限)TCPDF。执行shell命令是肮脏的,不完全是可移植的。lxg,伟大的思想是一样的!我只是在想把它换成DOMPF可能是最好的方法。我很抱歉我花了这么长时间才发布这个答案,我只是好久没来了。然而,我一直对帮助人们更好地理解技术很感兴趣,所以说,我确实喜欢HTMLDOC,并且永远会花时间帮助其他人做同样的事情。我为我花了这么长时间才发布这个答案而道歉,我只是好久没来了。然而,我总是对帮助人们更好地理解技术感兴趣,因此,尽管如此,我确实喜欢HTMLDOC,并且永远会,有时间帮助其他人做同样的事情。
#!/usr/local/bin/perl5 -s

#- $document coming from commandline variable, via caller: PHP script
$myDocumentLocale = "/path/to/markup/document/".$document;
if (-e $myDocumentLocale) {
    $documentHTML = $myDocumentLocale;
    $documentPDF = $documentHTML;
    $documentPDF =~ s/\.html/\.pdf/gi;

    $myDocumentHTML = `cat $myDocumentLocale`;

    $badPDF = 0;
    $myPDFDocumentLocale = $myDocumentLocale;
    $myPDFDocumentLocale =~ s/\.html/\.pdf/gi;
    $badPDF = &parsePDF($myDocumentLocale, $myPDFDocumentLocale);

    if ($badPDF == 0) {
        print "Successful!";
    }
    else {
        print "Error: No PDF Created.";
    }
    exit;

    }
else {
    print "Error: No document found.";
    exit;
}

sub parsePDF {
    my ($Ihtml, $Ipdf) = @_;
    $wasBad = 0;

    #- create PDF
    $ENV{HTMLDOC_NOCGI} = 1;
    $commandline="/usr/local/bin/htmldoc -t pdf13 --pagemode document --header ... --footer ... --left 1cm --size Letter --webpage -f $Ipdf $Ihtml";
    select(STDOUT); 
    $| = 1;
    #print "Content-Type: application/pdf\n\n";
    system($commandline);
    if (-e $Ipdf) {
        $wasBad = 0;
    }
    else {
        $wasBad = 1;
    }
    return $wasBad;
}

exit;