【发布时间】:2016-04-28 09:41:08
【问题描述】:
我下载了一个非常小的示例文件,我在尝试让 PHPWord 工作时正在使用它。我收到以下错误消息,但不知道为什么。
PHP 致命错误:在第 6 行的 /var/www/html/PhpOffice/ex_01.php 中找不到类“PHPWord”
我下载的小示例程序是:
<?php
require_once 'PhpWord.php';
echo realpath (dirname(__FILE__)) . "\n";
$PHPWord = new PHPWord(); <-- <-- <-- LINE 6 HERE
$section = $PHPWord->createSection();
$section->addText('Hello world!');
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=helloWorld.docx");
header("Content-Type: application/docx");
header("Content-Transfer-Encoding: binary");
$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007');
$objWriter->save('helloWorld.docx');
?>
网上发布的PhpWord.php文件有点大,不方便发布,关键是第43行和第44行及以下包含拼写匹配和大小写匹配的类代码:
class PHPWord
{
出于调试目的,我从命令行运行代码。这似乎给了我有意义的错误信息。
“要求”似乎正在查找文件。 “echo dirname”发布“/var/www/html/PhpOffice”,这是两个文件的正确位置。此外,作为一个实验,我在“require”语句中的文件名中添加了一个错字,这导致了“找不到文件”错误。因此,“require”看起来不错。
我有一些 PHP 经验,但这是我第一次阅读 PHP 中的类和命名空间。到目前为止,我不知道出了什么问题。有什么建议吗?
谢谢你, 布鲁斯
【问题讨论】:
-
IIRC,我最近通过检查源代码解决了一个类似的问题,并注意到它是用
<?而不是<?php打开的,如果你的 php.ini 设置为处理它,它就可以工作——我的不是。也许检查一下? -
PHPWord 是命名空间的...。您需要通过其完整的命名空间名称来引用该类...。
$phpWord = new \PhpOffice\PhpWord\PhpWord();尝试查看/samples文件夹中的一些示例 -
使用新的 \PhpOffice\PhpWord\PHPWord();我现在得到: PHP Fatal error: Class 'PhpOffice\PhpWord\Settings' not found in /var/www/html/PhpOffice/ex_01.php on line 6. 我将不得不做一些挖掘,但我怀疑我的第一个问题已解决,我现在在较低级别的调用上失败了。我仍然对命名空间有些困惑,如果分布式 PhpWord 文件由于内部代码而无法运行,显然我的安装中没有正确的东西。