http://www.kenjiweb.com/
↑のサイト様のさわやか日記という日記のPHPを使っています。
(※さわやか日記→http://www.kenjiweb.com/?mode=diary#i_diary)
それまで全く問題なく使用できていたのですが、10月26日に日記を更新した所
Warning: mktime(): Windows does not support negative values for this function in d:\****\****\php\i_diary\i_diary.php on line 156
(※サーバーのフォルダ名等は****に変更しています。)
上記のエラーが10数個画面に表示されました。
とりあえず該当PHPファイルの153行目からの
$yyyy = substr($days,0,4);
$mm = substr($days,4,2);
$dd = substr($days,6,2);
$chkday = mktime(0, 0, 0, $mm, $dd, $yyyy);
の部分を
$yyyy = substr($days,0,0);
$mm = substr($days,0,0);
$dd = substr($days,0,0);
$chkday = mktime(0, 0, 0, $mm, $dd, $yyyy);
上記のように変更すると、とりあえずエラーは収まりました。
ですがプログラム的な意味が分からないので不安です。
また、以前は日記を書いていない日に日記を表示すると一番新しい日の日記が表示されていたのですが、表示されなくなりました。
サイト様にて同様の質問をしましたが、どうやら更新が停止しているらしく返答をもらえませんでした。
マルチポストになるので一応削除をしてこちらにて質問させて頂きました。
正しい対処法があれば教えて下さい。
No.1ベストアンサー
- 回答日時:
$daysの値がおかしくなっているのかも知れないですね。
何故10/26に発生したのかはわかりませんが。
可能であれば$daysの値をechoなどで書き出すなどしてみてはいかがでしょう?
$days = "20051026";
この値を
$yyyy = substr($days,0,4);
$mm = substr($days,4,2);
$dd = substr($days,6,2);
このように取り出す仕組みだと思います。
$yyyy = substr($days,0,4);
#左から0番目から始まる4バイトを取得 → 2005を$yyyyに代入
$mm = substr($days,4,2);
#左から4番目から始まる2バイトを取得 → 10を$mmに代入
$dd = substr($days,6,2);
#左から6番目から始まる2バイトを取得 → 26を$mmに代入
negative values のエラーなので、恐らく
$days = "2005-10-26"
という値に変わってしまっているのだと思います。
その場合は - の分を考慮して
$yyyy = substr($days,0,4);
$mm = substr($days,5,2);
$dd = substr($days,8,2);
のようにするのが正しいんじゃないかな?と思います。
この回答への補足
ログをチェックしたら問題が見つかり、訂正したら無事直りました。
どうやら編集した際にログに問題が発生し2重投稿のような形になっていたようです。
ログの記述形式が
20051026,題名,本文
20051027,題名,本文
という具合になっていたのですが
20051026,題名,本文
051026,題名,本文
20051027,題名,本文
という具合になっていました。
回答して頂いた方のご指摘により気付くことが出来ました。
ありがとうございました。
こんにちは、回答ありがとうございます。
とりあえず$daysの値を書き出してみました。
10月26日の$dasyの値は20051026でした。
同様に他の日も調べてみましたが同様の形式でした。
mizuno3さんの仰る通り
$yyyy = substr($days,0,4);
$mm = substr($days,5,2);
$dd = substr($days,8,2);
のように変更してみましたが当然エラーは収まりませんでした。
もし他に修正可能な方法があれば是非ご教授下さい。
No.2
- 回答日時:
時刻を求めようとしてエラーになっています。
Windowsでは1970年から2038年の間しかサポートされていないのに、その範囲外の時刻だったということのようです。
参考URLはエラーが出た関数の説明です。
ちなみにsubstrを0,0としたため、たぶん勝手に0が入り、最新日記の日時(mktimeの結果)が1970年1月1日となってしまっているため、本来の最新の日記が表示されなくなったのだと思います。
ただ、ここでエラーになっているのであれば、たとえば前日の日記とかもエラーになりそうなのですが、それは問題ないのでしょうか?
$daysにどんな値が入っているのかがわかれば、原因が探れるかもしれません。
とりあえずサーバの時計がおかしくなってないか確認してみてください。
参考URL:http://www.php.net/manual/ja/function.mktime.php
こんにちは、回答ありがとうございます。
最新の日記が表示されないのはそういう理由だったのですね。
勉強になります。
エラーは全ての日の日記で発生します。
$daysの値は、10月26日であれば"20051026"、10月27日であれば"20051027"が入っていました。
サーバーの時計についてはよく分からないのでまた調べてきます。
もしまだ何かあれば引き続き宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) エクセルのVBAについて教えてください。 4 2023/01/21 10:21
- Excel(エクセル) エクセルの数式で教えてください。 2 2022/12/23 14:57
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 09:24
- MySQL SQLについて質問です。 SELECT TO_CHAR(TO_DATE('90-10-08.'YY- 4 2022/05/13 20:55
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 11:02
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Access(アクセス) Accessのデータ型の日付/時刻型について 1 2023/04/02 17:03
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/01/23 17:13
- Excel(エクセル) 【vba】日付の形式が勝手に変わってしまう。 1 2022/09/29 10:54
- Access(アクセス) アクセスで教えてください。 クエリで2日前を抽出する計算式を 入力して表示させると ちゃんとyyyy 1 2023/06/08 21:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォントの色を変えるには?
-
トランザクションが原因?DBに...
-
PHPで、エラーがない場合のみ画...
-
PHP8を使うと、大量のWarningが...
-
「@$変数」の「@の意味は?」
-
PHPでfatal errorが出ても無視...
-
HTMLとPHPのファイルの混在って...
-
正規表現での最後尾のバックス...
-
iframeからのアクセスか、ブラ...
-
PHP mb_send_mail メール送信 5...
-
パースエラーとは?
-
PHPでtableタグのオプションを...
-
PHPにて外部サイト内容が取得不...
-
「file_get_contents」で「HTTP...
-
エラーコードの意味を教えてく...
-
エラーのあるxmlファイルからの...
-
phpでget_headers()が使えない?
-
php7のhtmlentitiesはEUC-JPを...
-
ワードプレスサイト PHP8.0.25...
-
wininetでPOSTで値を渡せません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フォントの色を変えるには?
-
PHP8を使うと、大量のWarningが...
-
awsにApacheとPHPを入れて、何...
-
phpでPEAR::DBを使っているので...
-
ワードプレスサイト PHP8.0.25...
-
パースエラーとは?
-
phpでクラスのメソッドで同名の...
-
PHPで、エラーがない場合のみ画...
-
トランザクションが原因?DBに...
-
「@$変数」の「@の意味は?」
-
PHPでfatal errorが出ても無視...
-
PHPで特定のURLにジャンプす...
-
正規表現での最後尾のバックス...
-
PHPでネットワークドライブのop...
-
bindValueエラー
-
error_reporting(0);にも関わら...
-
これは例外処理でしょうか?
-
ある条件に当てはまったときに...
-
php5.6でsimplexml_load_string...
-
PHPでSMTPを使ってメール送信で...
おすすめ情報