ラベル php の投稿を表示しています。 すべての投稿を表示
ラベル php の投稿を表示しています。 すべての投稿を表示

2019年8月22日木曜日

phpのexec関数でコマンド実行時に、エラーが発生した場合はエラーが表示されていません

phpのexec関数でawsのコマンドを実行したら、エラーが発生したが、何も表示されませんでした。


<?php

$ret = exec("aws s3 ls", $out, $status);
var_dump($ret);
var_dump($out);
var_dump($status);

$statusの値を確認したところ、0ではないことをわかりました。ただ、エラーも何も出力されてないので、どこか駄目なのかさっぱりです。

そんなとき、標準エラーも標準出力へ吐き出すように設定すれば解決できます。

標準エラー出力も標準出力へ吐き出すには2>&1を使います。
改修後、以下になります。


<?php

$ret = exec("aws s3 ls 2>&1", $out, $status);
var_dump($ret);
var_dump($out);
var_dump($status);
再度実行後、ようやくエラーが表示されるようになりました。


Unable to locate credentials. You can configure credentials by running "aws configure
httpdはapacheユーザーとして実行されていますが、apacheユーザーのaws設定がうまくできてないことがわかりました。

2019年8月21日水曜日

php CondeIgniterでmysqlの「INSERT INTO ... ON DUPLICATE KEY UPDATE」を実現する

Mysqlの「INSERT...ON DUPLICATE KEY UPDATE構文」を使えば、レコードがなければ新規作成、あればアップデートを簡単に実現できます。

php CondeIgniterなら、同じような構文がないかを調べてみました。
幸いreplaceを使えば、同等な機能を得られます。 例:↓

$data = array(
        'title' => 'My title',
        'name'  => 'My Name',
        'date'  => 'My date'
);

$this->db->replace('table', $data); 

2018年4月13日金曜日

php.iniファイルの場所を調べる

サーバのphp.iniファイルの場所を調べる方法、
1、まず、サーバにsshします
2、次のコマンドを実行「php -i | grep "Loaded Configuration File"

2018年3月9日金曜日

php改行コード

PHP_EOL

phpの改行コード、自分で入れると、 機種依存でうまく表示できない場合があります。
「PHP_EOL」を使えば、安全になります。

2017年10月12日木曜日

php stdClassのインスタンスを生成すると同時に属性を設定する方法

例:以下2つの動作を一つにするには、

$obj = new \stdClass();
$obj->attr = 'testKey';

以下の書き方で一つに纏められます。↓

$obj = (object) array(
    'attr'=>'testKey'
);

2016年12月18日日曜日

phpで指定したURLのファイルの最終更新日時を取得する方法

サンプルコードは以下の通りです。

ソフトバンクのバナー画像(http://m.online-shop.mb.softbank.jp/mobile/set/common/p/img/int_inc/special/logo-white.png)の最終更新日時を取得するサンプルです。

// ソケット接続開始(引数にはurlとポートを指定)
$fp = @fsockopen("http://m.online-shop.mb.softbank.jp", 80);

if (!$fp) {
    return false;
}

$request = 'GET ' . "mobile/set/common/p/img/int_inc/special/logo-white.png" . " HTTP/1.1\r\n";

// もしベーシック認証が存在する場合は、以下のように指定する
//  $request .= 'Authorization: Basic ' . base64_encode($user . ':' . $pass) . "\r\n";

fwrite($fp, $request);
fwrite($fp, 'Host: http://m.online-shop.mb.softbank.jp\r\n');
fwrite($fp, "Connection: Close\r\n");
fwrite($fp, "\r\n");

while (!feof($fp)) {
    $buf = fgets($fp, 4096);
    if (preg_match('/^([^:]+):(.+)$/', $buf, $matches)) {
        $name  = $matches[1];
        $value = trim($matches[2]);
        if ($name == 'Last-Modified') {
            // 最終更新日時を取得する
            $lastModified = $value;
            break;
        }
    }
}
fclose($fp);

2016年12月14日水曜日

phpのcurlでリモートの情報を取得しようとしたら、「Peer certificate cannot be authenticated with known CA certificates」になりました。

Peer certificate cannot be authenticated with known CA certificates
の解消方法、
エラーとなったのは、HTTPS証明書を信頼するように設定されているからです。

テスト環境なので、そのを無視するように設定すれば解消できます。

以下の一行を追加


//下記一行を追加
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, false);

2016年12月10日土曜日

PHP 配列Aから配列Bに存在する要素を取り除く方法

もちろんロープ処理で一つを見ていく方法がありますが
一番簡単なのはPHPの関数array_diffを使うことです。

例:
<?php
$array_a 
= array("111""222""3444""5555");$array_b = array("222""5555");$result array_diff($array_a$array_b);
print_r($result);?>
出力は次の通りです。
Array
(
    [1] => "111",
    [2] => "3444"
)

2016年11月6日日曜日

php日付から月を取得する方法

カレント時間から月の取得するには以下の三つ方法があります。
date('M') 
date('n') 
date('m')

とある文字列から月の取得方法は以下の通りです。

$mydate = "2010-05-12 13:57:01";
$month = date("m",strtotime($mydate));