我目前使用PHP的插件,就設在這裏的Pygments來做:http://derek.simkowiak.net/pygments-for-php/。PHP的exec()的Pygments來做PHP
實際上從該代碼調用Pygments來做該生產線是一個exec()通過:
pygmentize -f html $extra_opts -l $language $temp_name作爲命令。這一切工作正常,我得到的輸出,並由插件格式化。
我想同時發生的是Pygments創建它的圖像,所以我通過exec()一個類似的命令:
pygmentize -f png $extra_opts -l $language -o $full_image_path/$output_file.png $temp_name這是我遇到問題的地方。圖像從不出現在預期的文件夾中。
但是,如果我var_dump()
那個命令字符串之前我exec()
它並採取它並直接從命令行運行它,它工作正常。
我試圖呼應EXEC(「WHOAMI」),它告訴我,PHP用戶是www數據。我試圖給www-data的權限,並將存儲圖片的文件夾的所有權更改爲www-data。我也嘗試將權限更改爲777,以查看會發生什麼,答案是什麼。
有什麼我失蹤了嗎?我正在用盡想法嘗試。謝謝!
編輯:我檢查過的另一件事是exec命令的輸出和返回值。它輸出一個空數組,並返回1作爲返回值。
編輯2:在看到該目錄對於PHP用戶應該是可寫/可讀的之後,pygments是否有權將其寫入特定用戶?我不確定這是否合理,因爲當我自己運行它時它工作正常,事實上,當PHP使用HTML詞法分析器運行它時,它能夠運行。我對Python並不是很有經驗,所以我不知道這是否是一個潛在的問題。
嘗試使用'print()'在調用exec()之前查看構造的命令字符串。這應該告訴你問題是什麼。 – SDC 2013-03-06 15:48:31
會做'var_dump()'會做的事情嗎?我'var_dump($ command)'其中'$ command'是在調用'exec()'之前構造的命令字符串,並且我得到:'pygmentize -f png -O full,style = manni,cssclass = pygmentize_kbOKBd -l php - o /srv/www/path/to/images/uploads/2513732976ad4b7.02729290.png/tmp/pygmentize_kbOKBd'。然後我可以在命令行中自己運行它,並且它工作正常,這就是爲什麼它對我來說很奇怪,我認爲這是一個權限問題,但即使在文件夾777上我似乎也無法修復它我正在使用它。 – 2013-03-06 15:55:54
嗯,是的,'var_dump'在這裏和'print'實現了相同的功能。這個想法是要確認我們正在呼叫我們認爲我們打來的電話。所以,既然這很好,我想它排除了這個想法。 – SDC 2013-03-06 16:00:43