2014-11-13 69 views
0

我有一個功能,可以將文件上傳到網絡存儲,並在將文件保存到存儲系統之前,如果該文件是我想要的pdf文件確定一個pdf文件有多少頁面。保存文件之前在uplod上的PDF文件上的PHP頁數

目前,我有以下幾點:

$pdftext = file_get_contents($path); 
    $num = preg_match_all("/\/Page\W/", $pdftext, $dummy); 
    return $num; 

其中$路徑是,我使用的fopen打開文檔

此功能有時卻是不可靠的臨時路徑。我知道這也是這個功能

exec('/usr/bin/pdfinfo '.$pdf_file.' | awk \'/Pages/ {print $2}\'', $output); 

但是這需要文件donwloaded在服務器上。任何想法或建議,以完成此?

+0

你可以在客戶端使用javascript,並使用ajax來通知服務器這一點。這可能會或可能不會解決您的問題。 –

+0

你能解釋一下你的意思嗎? – Yeak

回答

1

PHP是一種服務器端語言,這意味着所有的處理都發生在您的服務器上。 PHP無法確定客戶端文件的詳細信息,它不知道該文件是否需要訪問它。

所以你現在的問題的答案是:這是不可能的。但是,你可能有一個目標,爲什麼你要檢查這一點,分享這個目標可能有助於獲得更有建設性的答案/建議。

0

由於Oldskool已經解釋了這在客戶端使用PHP是不可能的。您必須將PDF文件上傳到服務器,然後確定頁面數量。有庫和命令行工具可以實現這一點。

如果您不想將PDF文件上傳到服務器(這裏似乎是這種情況),您可以使用pdf.js庫。現在,客戶端可以自行確定PDF文檔中的頁面數量。

PDFJS.getDocument(data).then(function (doc) { 
    var numPages = doc.numPages; 
} 

還有其他的圖書館,以及,但我不能確定他們的瀏覽器支持(http://www.electronmedia.in/wp/pdf-page-count-javascript/

現在你只需提交頁面的數量從JavaScript到需要這些信息的PHP文件。爲了達到這個目的,你只需使用ajax。如果你不知道Ajax,只需谷歌它有足夠的例子。

作爲一個側面說明;永遠記住不要相信客戶。客戶端可以修改頁面數量併發送完全不同的頁面數量。

0

對於那些運行linux服務器的人來說,這實際上是可能的。您需要pdfinfo擴展安裝和使用功能

$pages = exec('/usr/bin/pdfinfo '.$pdf_file.' | awk \'/Pages/ {print $2}\'', $output); 

輸出正確的頁面數,其中$ pdf_file是上傳時,服務器上的臨時路徑。

它沒有爲我工作的原因是因爲我沒有安裝PDFinfo。