今、ファイルをアップロードしたらそれに変換を施して返すサイトを作っています。
ファイルをアップロードするところまではできたのですが、ファイルを変換する箇所が動きません。
変換にコマンドラインツールを使っているので、PHPからexec関数で呼び出しているのですが、そのコマンドが出力ファイルを作ってくれません。パーミッション周りが怪しい気がしているのですが、どこをどう変えればいいかよくわかりません
環境としては
- CentOS7
- Nginx
- PHP7
こんな感じです。
(今手元にパソコンがないので細かいバージョン等はわかりません)
追記
パソコンを動かせるようになったので詳しいプログラム等を載せます。
php
1<?php 2 // 一時ファイルができているか(アップロードされているか)チェック 3 $filename = uniqid() . ".md"; 4 if (!is_uploaded_file($_FILES['upload_file']['tmp_name'])) { 5 echo "file not uploaded."; 6 die; 7 } 8 // 一時ファイルを保存ファイルにコピーできたか 9 if (!move_uploaded_file($_FILES['upload_file']['tmp_name'], "./_upload/$filename")) { 10 // コピーに失敗(だいたい、ディレクトリがないか、パーミッションエラー) 11 echo "error while saving."; 12 die; 13 } 14 15 exec("cat ./upload$filename | perl -pe 's/。/./g; s/、/,/g;' | pandoc --to docx -o ./output.docx", $res, $type); 16 17 if (file_exists('./output.docx')) { 18 header('Content-Type: application/octet-stream'); 19 header('Content-Length: ' . filesize('./output.docx')); 20 header("Content-Disposition: attachment; filename=output.docx"); 21 22 readfile('./output.docx'); 23 unlink('./output.docx'); 24 } else { 25 echo "error occured"; 26 }
- アップロードされたファイルを_uploadフォルダに移す
- そのファイルに対してpandocを実行する
- pandocがきちんと出力をしていた場合(output.docxが生成された場合)そのファイルをダウンロードさせる
このような流れです。1はできているのですが、pandocの実行がうまくいきません。(pandocというのはMarkdownやLaTeXなどの相互変換するためのツールです)
回答2件
あなたの回答
tips
プレビュー