0

PHP と cURL は、私の amazon EC2 マイクロ インストール 12.04.2 LTS (GNU/Linux 3.2.0-40-virtual x86_64) の Web に接続されていないディレクトリで正常に動作します。

cURL を使用して、コマンド ラインでいくつかのスクリプトを実行できます。

    #!/usr/bin/php
    $command = '/absolute/path/to/running/process';
    $url = 'http://example.com';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT , 400);
    curl_setopt($ch, CURLOPT_TIMEOUT, 400);

    $resp = json_decode(curl_exec($ch), 1);
    $data1 = round($resp["data1"], 6);
    $data2 = round ($resp["data2"], 2);

    curl_close($ch);


    $c = array(
            'var1' => trim(shell_exec($command)),
            'var2' => trim(shell_exec($command)),
            'var3' => trim(shell_exec($command)),
            'var4' => number_format($data1, 6, '.', ''),
            'var5' => number_format($data2, 0, '.', ',')
    );
    var_dump($c);

これはうまくいきます。

ただし、この同じスクリプトを Web に面したディレクトリに配置するとすぐに (#!/usr/bin/php明らかに削除します)、ページが読み込まれます (echo 'Hello World!'一番上に入力して、リモート マシンからブラウザでテキストを表示できます)。空白にして、echo後にステートメントを追加するとcurl、何も起こりません。関数呼び出しをコメントアウトしてcurlコマンドを単純に実行しようとすると、うまくいかないようです (値の配列全体にNULLorが入力され0ます)。

  • PHPで何が起こっているのですか?cURL が /var/www/ フォルダーでは実行されず、他の場所では問題なく実行されるのはなぜですか? cURL を使用して情報をデータベースに保存し、パブリック API から JSON を取得しています。
  • shell_exec通常はコマンド ラインで PHP を使用してスクリプトを実行できないのはなぜですか?
  • が設定されていても、エラーは PHP に表示されませんerror_reporting(E_ALL)。locate を使用してエラーのログを見つけることができませんerror_logまたはphp.err、phpエラーログのデフォルト名だと思いました。

これら 2 つの問題が関連している可能性があるように感じますが、理由がわかりません。おそらくアクセス許可ですか? コマンドを使用しないと、このディレクトリ内のファイルを作成または変更できないことに気付きましたがsudo、これは通常ではありません。

別の注意: phpinfo() は cURL について何も述べていませんが、コマンド ラインで動作します。理由はわかりません。

4

2 に答える 2

0

単なる観察ですが、これらの行には余分な <'> 一重引用符があります。

        'var1' => trim(shell_exec($command')),
        'var2' => trim(shell_exec($command')),
        'var3' => trim(shell_exec($command')),

それ以外は、ヨアヒムの提案に同意します。

于 2013-07-10T06:30:25.987 に答える
0

Ubuntu にはphp.ini、コマンド ライン PHP と Apache2 PHP 用の個別のファイルがあります。これらのファイルの構成には、おそらく異なる拡張機能がロードされている (または異なるセキュリティ設定) ため、Apache は CLI と同じ機能を持っていません。

$ ls -l /etc/php5/cli/php.ini
-rw-r--r-- 1 root root 65485 Jan 27 09:20 /etc/php5/cli/php.ini

$ ls -l /etc/php5/apache2/php.ini
-rw-r--r-- 1 root root 65839 Oct 31  2012 /etc/php5/apache2/php.ini
于 2013-07-10T05:58:19.303 に答える