2016-05-15 63 views
0

如何使用exec()函數將PDF文件的文件名中包含空格的PDF文件轉換爲

對於例如:文件次數1.pdf到文件1.JPG

<?php 

$pdf = "file 1.pdf"; 
$pdf_first_page = "file 1.pdf[0]"; 
$jpg = str_replace("pdf", "jpg", $pdf); 
exec ("convert $pdf_first_page $jpg"); 

?> 

,我發現了以下錯誤:

convert.exe: unable to open image `file 1.pdf': No such file or directory @ error/blob.c/OpenBlob/2702. 
convert.exe: no images defined `file 1.jpg' @ error/convert.c/ConvertImageCommand/3257. 
+0

[轉換PDF與PHP JPG圖片](http://stackoverflow.com/questions/13600598/convert-pdf-to-jpg-image-with-php) – Nasreddine

+0

轉換PDF文件可能的複製文件名中沒有空格就是爲我工作的。我在文件名中包含空格的文件遇到問題。 –

+0

鏈接的問題也爲此提供了一個解決方案,即將文件名放在引號之間 – Nasreddine

回答

3

您需要通過escapeshellarg()來傳遞參數,這樣的參數/文件名:文件

$pdf_escaped = escapeshellarg($pdf_first_page); 
$jpg_escaped = escapeshellarg($jpg); 
exec("convert $pdf_escaped $jpg_escaped"); 
+0

它仍然不會轉換PDF文件的文件名中有空格。 –

+0

它應該。你能否編輯你的問題來指定你在哪個操作系統上使用PHP(Linux,Windows?),以及你遇到的具體錯誤? (你是* [記錄錯誤](http://stackoverflow.com/questions/3531703/how-to-log-errors-and-warnings-into-a-file),對不對?) –

+0

不是我不是記錄錯誤。我在Windows上使用PHP。 –

1

嘗試把雙引號中的參數(文件名)(你必須用反斜槓逃逸):

exec ("convert \"$pdf_first_page\" \"$jpg\""); 

要圍繞用雙引號傳遞的外殼COMAND參數通常是 一個很好的做法 - 即使不帶空格

+0

它仍然不會轉換PDF文件的文件名中有空格。 –

+0

我的答案中提出的最後一行被修改的代碼可以在我的機器上成功運行(Debian)。它按預期輸出'file 1.jpg'。 – Reto

+0

convert.exe:無法打開圖像'file 1.pdf':沒有這樣的文件或目錄@ error/blob.c/OpenBlob/2702。 convert.exe:沒有圖像定義'file 1.jpg'@ error/convert.c/ConvertImageCommand/3257。 –

0

空間Linux上的名稱必須在空格前用\註釋轉義字符進行轉義。下面是一個例子。

file\ 1.pdf 
相關問題