ここから本文です

PHPのログファイル呼び出しでエラーが出て困っています・・・ 今までサーバーの環境...

tsu********さん

2012/10/1702:54:15

PHPのログファイル呼び出しでエラーが出て困っています・・・
今までサーバーの環境はPHP4でエラーは出ませんでしたが
PHP5.3へ移行したところ、下記のようなエラーが出るようになりました。

以下がコード(一部抜粋)なのですが
ログファイルの最初の行に記述している文字列のみ
うまく処理されず、$uy等6行で以下のエラーが出てしまいます。。。
↓こんな感じの・・・
Warning: date() expects parameter 2 to be long, string given ~

2行目以降は問題なく変換されています。
配列に入っている数字以外の内容は正しく表示されました。(1行目を含む)

list($unix1,$unix2,$unix3) = explode("<>",$line);
$uy = date("Y",$unix1);
$um = date("m",$unix1);
$ud = date("d",$unix1);
$uh = date("H",$unix1);
$ui = date("i",$unix1);
$us = date("s",$unix1);

$unix1の配列に入っている内容はUNIX時間なので数字のみです。

対処法を探して色々なサイトを巡りましたが、解決には至りませんでした。。。
初歩的な内容で申し訳ございませんが
解決方法を御教授いただけますと幸いです。
何卒、宜しくお願い致します。

補足お答えいただきありがとうございます。

データはキチンと入っている事は確認しております。

>>$unix1 = (int) $unix1;
↑を試してみましたが、エラーは出なくなりましたが値が0と判定されるようです・・・

参考になるかはわかりませんが・・・
新たなバグが出る事を承知で、以下の文字をlistと$uyの間に挿入してみました。
echo "{$unix}<br>\n";

1行目のデータのみ、エラーコードの上に正しく表示され
2行目以降のデータは、エラーコードの下に出ています。。。(以下のような感じです)

1344347938
Warning: date() expects parameter 2 to be long, string given~(6行分)
1328204344
1347366265

表示はされるのに、1行目だけ引数としてうまく渡っていない感じです。。。

閲覧数:
269
回答数:
4
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

shimixさん

編集あり2012/10/1710:52:57

移行時にログファイルをメモ帳などで開いて編集していませんか?

ファイルの先頭にutf-8のBOMが存在すると(バイナリを含むので)提示されているエラーになります。一度エディタで開いてBOMなしのutf-8(いわゆるutf-8n)で保存し直してみてください(メモ帳のutf-8は「BOMあり」しかありません)。

「1行目だけ」ということなので(しかも最初の要素だけ=>ファイルの先頭だけがおかしい)、原因はほぼこれじゃないかと思いますが・・・

質問した人からのコメント

2012/10/17 11:28:47

仰るとおり、移行時にTeraPadで文字コードを変更しましたが
utf-8で保存して転送し直していました。
再度TeraPadで、utf-8nに変更して転送し直したところ
移行前と同様に問題なく表示されました。

お答えいただいき、ありがとうございました。

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

kir********さん

2012/10/1708:22:44

$lineの取得方法は?file?fgets?
原因はわからんけど、$lineが空文字列なんじゃ?
何が入っているか確認した?

2012/10/1706:50:55

PHPの性質からは考えられないですが(型が動的なので)、エラーメッセージ通りに読めばですが、date()関数の第2引数である$unix1は、int型で指定して欲しいのに、string型で入力が入ってきてます、ってメッセージです。


$unix1に対してdate()関数に渡す前に

$unix1 = (int) $unix1;

とでもしておけば解決するかもです。また、おそらく$unix1が空の時でも似たようなメッセージが返ってくる場合もあるかと思います。


マニュアルにはint型のみ指定してくれと書いてありますが、自分の記憶が確かなら、array[$i]とかでも渡せたような気がします。

http://php.net/manual/ja/function.date.php
注意:

この関数が受け付けるのは integer のタイムスタンプだけです。したがって、書式指定文字 u が有用となるのは date_create() で作成したタイムスタンプを用いて date_format() を使用した場合のみです。

a4a********さん

2012/10/1705:24:07

>$unix1の配列に入っている内容はUNIX時間なので数字のみです。
数字のみだったらstring givenってメッセージは出ないのでは?

ここは見た?
http://php.net/manual/ja/function.date.php

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる