新服务器上的PHPExcel错误
Posted
技术标签:
【中文标题】新服务器上的PHPExcel错误【英文标题】:PHPExcel Error on new server 【发布时间】:2011-08-30 06:58:49 【问题描述】:刚刚将我的安装转移到新服务器。我在调试时遇到了麻烦,据我所知,在服务器创建/读取文件的文件夹上,所有权限仍然相同或比我的旧服务器更开放......
据我所知,只是无法在某处创建临时文件,但我不知道在哪里......
警告:tempnam() [function.tempnam]:open_basedir 限制生效。 File() 不在允许的路径内:/home/myacnt/public_html/users/internal/phpExcel/Writer 中的 (/:/usr/lib/php:/usr/local/lib/php:/tmp) /Excel5/Worksheet.php 第 346 行
警告:fopen() [function.fopen]:第 347 行 /home/myacnt/public_html/users/internal/PHPExcel/Writer/Excel5/Worksheet.php 中的文件名不能为空
警告:tempnam() [function.tempnam]:open_basedir 限制生效。 File() 不在允许的路径内:/home/myacnt/public_html/users/internal/PHPExcel/Writer 中的 (/:/usr/lib/php:/usr/local/lib/php:/tmp) /Excel5/Worksheet.php 第 346 行
警告:fopen() [function.fopen]:第 347 行 /home/myacnt/public_html/users/internal/PHPExcel/Writer/Excel5/Worksheet.php 中的文件名不能为空
警告:tempnam() [function.tempnam]:open_basedir 限制生效。 File() 不在允许的路径内:/home/myacnt/public_html/users/internal/PHPExcel/Writer 中的 (/:/usr/lib/php:/usr/local/lib/php:/tmp) /Excel5/Worksheet.php 第 346 行
警告:fopen() [function.fopen]:第 347 行 /home/myacnt/public_html/users/internal/PHPExcel/Writer/Excel5/Worksheet.php 中的文件名不能为空
警告:tempnam() [function.tempnam]:open_basedir 限制生效。 File() 不在允许的路径内:/home/myacnt/public_html/users/internal/PHPExcel/Shared 中的 (/:/usr/lib/php:/usr/local/lib/php:/tmp) /OLE/OLE_File.php 第 95 行
警告:fopen() [function.fopen]:第 96 行 /home/myacnt/public_html/users/internal/PHPExcel/Shared/OLE/OLE_File.php 中的文件名不能为空
致命错误:在 /home/myacnt/public_html/users/internal/PHPExcel/Shared/OLE/OLE_File.php:98 中包含消息“无法创建临时文件”的未捕获异常“异常”:#0 / home/myacnt/public_html/users/internal/PHPExcel/Writer/Excel5.php(190): PHPExcel_Shared_OLE_PPS_File->init() #1 /home/myacnt/public_html/users/functions/export.php(58): PHPExcel_Writer_Excel5-> save('/home/myacnt/...') #2 /home/myacnt/public_html/users/manager/functions/export.php(196): multiCSVToExcel(Array, '1305481112_Nick...') #3 /home /myacnt/public_html/users/manager/viewInvoice.php(13): exportInvoiceLog(Array) #4 main 在第 98 行的 /home/myacnt/public_html/users/internal/PHPExcel/Shared/OLE/OLE_File.php 中抛出
【问题讨论】:
【参考方案1】:您正在处理一个名为open_basedir 的限制,如您的错误消息所示。您要么必须检查php.ini
中的值(您可以使用phpinfo()
快速检查)并将文件放在指示的目录中,修改值,或者干脆完全禁用它。如果禁用它,则需要确保对文件名进行完整性检查,例如使用 basename 删除潜在的“../../”遍历。
【讨论】:
@onteria 我在 php.ini 中寻找哪个值?我将我的目录设置为 777 用于 php.ini 中include
中的临时文件,以及 /user/lib/php:/user/local/lib/php:/tmp:/home/myacnt/uploaded_docs
这是我试图写入的 777 文件夹...
@Shackrock 在我的回复中查看open_basedir
的链接
@onteria_ 嗯好的。这就说得通了。所以下一个问题显然是,我该如何克服这个 ONE 脚本呢?我也有点想知道为什么其他脚本打开它没有问题,但是这个类呢??
@Shackrock 不幸的是,我对代码库了解得不够多,无法回答为什么其他脚本可以正常工作。您应该发布您用于调用此类的代码,并输出您传递给它的文件名并验证文件的位置是否正确。
@onteria_ 看看这个:If your server is complete run by yourself and with no clients on then you can turn it off in php.ini. However if you are using your server for lots of clients I would only turn it off for your OWN sites (as it's a security setting).
你同意吗?这台服务器是一个 VPS,全是我的,具有 root 访问权限...【参考方案2】:
这个修复对我有用:
http://phpexcel.codeplex.com/workitem/17840
更改必须应用于 Shared/File.php
【讨论】:
以上是关于新服务器上的PHPExcel错误的主要内容,如果未能解决你的问题,请参考以下文章
PHPExcel下载文件在实时服务器中提供错误,因为文件扩展名不正确
wamp 服务器无法在 CodeIgniter 中导出 Phpexcel 文件