【忘備録】PHPからのexecによる外部プログラム呼び出し時に126エラーが出る原因と対処法

どうも!マルネギです。サーバ自前で立てる時にはまったことメモです。

広告

事象の概要

PHP内でexec関数を使って外部プログラム呼び出しをしようとしたら、126/127エラーが出てはまったので、対処法をメモ
掲示板とかにも色々書かれていて、一通りの対処をしたので、まとめておく。

環境

OS:CentOS7
PHP:5.4
Apache:2.4

原因

1.実行プログラムのパスをフルパスで指定していない(解決せず)

https://sdtakayama.ti-da.net/e2888475.html
こちらの記事を参考にした。
→元々フルパスで指定していたので、こちらの記事の対処法では解決せず。
(stackoverflowには126エラーはパスではなく権限の問題と記載されていた。パス違いで127が出るみたい)

2.実行プログラムがApacheユーザーの権限で実行できるようになっていない(解決せず)

https://kotaeta.com/54219590
こちらの質問を参考にした。
ただ、一回目の試行時点でスクリプトの権限はapacheにしていた。
ただ、権限周りは改めて確認するとCentOS7は以下の記事のように、Apacheの実行ユーザーが初期設定でdeamonユーザーになっているとのこと。

Apacheの実行ユーザー(起動ユーザー)を変更する方法


→確認したところ、手元の環境ではapacheグループのapacheユーザーになっていた。
この段階で出ているエラーは126(権限設定)だった。

3.selinuxが有効化されている(解決!)

PHP(Web)から内部に設置されたファイルの実行を妨げるとなるとどうもセキュリティ設定あたりかな?ということで、selinuxの状態を見にいってみた。

上記のgetenforceコマンドを入力したところ出力結果はEnforcing。
というわけで、さっそくselinuxを無効化した。
一時的に無効化するなら

で状態がPermissiveになる。
この状態でexecしたところ無事動作し、エラーコードは0になった。
毎回サーバ起動時に操作するのもめんどくさいので、

と設定ファイルを書き換えてやる。
これで、起動時にselinuxがオフになり、気にせずにexecできるようになった!

というわけでメモ書きでした。

ではでは!

※この記事の執筆途中でcrayou syntax highlighterがWordpressのバージョンアップについていけずに使おうとすると記事全体が表示されない事象に見舞われました。

WordPressの記事が正しく表示されない!更新が途絶えたプラグインを更新【Crayon Syntax Highlighter】


こちらのブログの通りに更新したら治ったので、そちらも追記しておきます。