[英]PHP, file_get_contents() returning null for PDF files
I would like to get content of a pdf file into a variable.我想将 pdf 文件的内容放入一个变量中。 I tried to do this using
我尝试使用
file_get_contents("file.pdf")
file_get_contents("file.pdf")
but it's returning NULL.但它返回NULL。 If I do the same with .jpg file for example it's working.
例如,如果我对 .jpg 文件做同样的事情,它就可以工作。 Any idea how to overcome this problem?
知道如何克服这个问题吗? Is there another way?
还有其他方法吗? Thanks in advance!
提前致谢!
Edit:编辑:
Service code:服务代码:
<?php
function sendAttachment($msg){
$responsePayloadString = <<<XML
<payload:receiveReport xmlns:payload="http://wso2.org/wsfphp/samples/mtom">
<payload:reports>
<payload:report>
<payload:content xmlmime:contentType="application/pdf" xmlns:xmlmime="http://www.w3.org/2004/06/xmlmime">
<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:report1"></xop:Include>
</payload:content>
</payload:report>
</payload:reports>
</payload:receiveReport>
XML;
$report1 = file_get_contents("samplePDF.pdf");
$responseMessage = new WSMessage($responsePayloadString,
array("attachments" => array("report1" => $report1),
"useWSA" => TRUE));
return $responseMessage;
}
$operations = array("receiveReport" => "sendAttachment");
$service = new WSService(array("operations" => $operations,
"requestXOP" => TRUE,
"useMTOM" => TRUE));
$service->reply();
?>
Client Code:客户代码:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
/******* FirePHP Debug *******/
require_once('../FirePHPCore/FirePHP.class.php');
ob_start();
$firephp = FirePHP::getInstance(true);
/******* FirePHP Debug *******/
$requestPayloadString = <<<XML
<receiveReport></receiveReport>
XML; XML;
try {
$client = new WSClient(
array( "to" => "http://localhost/ReportDL/ReportService.php",
"useMTOM" => TRUE,
"responseXOP" => TRUE,
"useWSA" => TRUE));
$requestMessage = new WSMessage($requestPayloadString);
$responseMessage = $client->request($requestMessage);
$cid2stringMap = $responseMessage->attachments;
$cid2contentMap = $responseMessage->cid2contentType;
if($cid2stringMap && $cid2contentMap){
foreach($cid2stringMap as $i=>$value){
$f = $cid2stringMap[$i];
$contentType = $cid2contentMap[$i];
$firephp->log($f, "pdf"); //DEBUG
}
}else{
printf("attachments not received ");
}
} catch (Exception $e) {
if ($e instanceof WSFault) {
printf("Soap Fault: %s\n", $e->Reason);
} else {
printf("Message = %s\n",$e->getMessage());
}
}
?>
Edit2:编辑2:
string '%PDF-1.5
%âãÏÓ
2 0 obj
<</Length 285/Filter/FlateDecode>>stream
xœ’_KÃ0Åßó)Ä{“4i|S¨‚ÓÀžµKiçÚ0¿½i;ëýƒ#ÐÐÃýœž¦dwŽI
&ÒàV,qlÁJfŒ�%hCåÙ’;YǪÕrÿÎÿêeã|}O@\Æ0,‹<ÌXäE¯6OW°‹‡z
ñÑ
Z¸}¼t]®æ$ä’Õð³ToGÞ!5¾í»R ›4Ù<)¤:•&ž@©ù¸v’4®ƒžB®gÁ6è49X»P‚c@uÌíPñîÝÃҿ“ß|V;Hö/Å&÷Ðw?f I.MHq²Mö>w~5k$‘8Šq£ç:õÛmVçù?òi©ý'Ó-Í^$eNðÿ\¥sá6ø(¼`ßè¿Á÷
endstream
endobj
6 0 obj
<</Type/Catalog/PageMode/UseNone/Pages 3 0 R>>
endobj
7 0 obj
<</Creator(BIRT Report Engine 2.6.0 using iText version unknown.)/Producer('... (length=1231)
file_get_contents()
should return FALSE
if a file is unreadable - otherwise it return a string containing the files content.如果文件不可读,
file_get_contents()
应该返回FALSE
- 否则它返回一个包含文件内容的字符串。
The problem must lie elsewhere - start debugging your code in a procedural way with var_dump()
to find out where your data is lost.问题一定出在其他地方 - 使用
var_dump()
以程序方式开始调试代码,以找出数据丢失的位置。
您需要在 PHP 页面的顶部添加以下代码。
header("Content-type:application/pdf");
In case anyone else comes here for this, my issue was the file Permissions weren't correct for www-data.如果其他人为此而来,我的问题是文件权限对于 www-data 不正确。 Once permissions were changed, the web server could read it and functioned as expected.
更改权限后,Web 服务器可以读取它并按预期运行。
I know it's a "duh" thing, but it wasn't obvious to me at first.我知道这是一件“废话”的事情,但起初对我来说并不明显。
if ($file_ext == 'pdf') { $content_type = "application/pdf"; }
elseif($file_ext == 'ppt') { $content_type = "application/vnd.ms-powerpoint"; }
elseif($file_ext == 'pptx') { $content_type = "application/vnd.openxmlformats-officedocument.presentationml.presentation"; }
elseif($file_ext == 'xls') { $content_type = "application/vnd.ms-excel"; }
elseif($file_ext == 'xlsx') { $content_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; }
elseif($file_ext == 'doc') { $content_type = "application/vnd.ms-word"; }
elseif($file_ext == 'docx') { $content_type = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; }
else { $content_type = "application/octet-stream"; }
$document_contents = file_get_contents("/Server/location/to/$file");
header("Content-type: $content_type");
echo $document_contents;
die();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.