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

2017年6月8日木曜日

Laravelを Github + Circle CIで CIするまでの参考サイトまとめ


Laravel

前にメモしたリンク集。
floatingdays: 初めてのLaravel参考サイト
floatingdays: Laravelと Vue.jsのチュートリアル参考サイト

MySQL5.6以前だと出るエラーの対処方法。
他にもやり方はあるみたいだけど、ここのが公式?
Laravel 5.4: Specified key was too long error - Laravel News

テストを書くチュートリアル。
Laravel5.3以前の記事のようで、Laravel5.4からはページ遷移やページ内のテストは別途インストールが必要なLaravel Duskの管轄に変わったので、その部分は読み替えが必要。
Laravelでテストコードを書くためのチュートリアル - Qiita


Github

Githubを二要素認証にして、かつ、Githubへのpushをsshではなくhttpsでする方法。
ユーザー名とトークンの入力省略も。
https+アクセストークンを使ってGitHubのアカウントを使い分ける - Qiita

同じく入力省略について、こちらは.netrcに書く方法。
[Git][GitHub]GitHubにPushする際に認証失敗する | DevAchieve


Circle CI

DBまわりの設定。
seedはtest内でやるなら設定ファイルには要らないかも。
CircleCiでLaravelのMySQLを使ったテストを実行する - Qiita

APP_KEYをcircle.ymlに定義しないとエラーになるので書いておく。
エラーメッセージが分かりづらい → "RuntimeException: The only supported ciphers are AES-128-CBC and AES-256-CBC with the correct key lengths."
Laravel アプリケーションを、 Circle CI 経由で AWS ElasticBeanstalk に自動デプロイ - Qiita

Circle CIで使えるPHPのバージョンの参考ページのリンクなど。
PHPプロジェクトにおけるCircle CIの設定 - Qiita

Circle CIからプロジェクトを削除せずにGithubからプロジェクトを削除すると、Circle CI側で削除できなくなる(ずっと読み込み中になる)。
対策は、Githubに同名のプロジェクトを作ればCircle CIから削除できるようになる。
相羽 大輔 (Daisuke AIBA)さんのツイート: "さっきの件、解決。CircleCIに登録したプロジェクトを削除するには「Project Settings > Stop Building on CircleCI」GitHub側で先に消すとCircleCIのプロジェクト設定が触れなくなるので注意。 #kzrb"

2013年11月9日土曜日

MySQLで 「ERROR 2006 (HY000) at line xxx MySQL server has gone away」

調べたことをメモしておく。


mysqldumpでエクスポートした1GB余りのデータをインポートする時に、下記エラーが発生。

ERROR 2006 (HY000) at line 351 MySQL server has gone away

対策
↓
インポート時に「MySQL server has gone away」が発生したときの対処 | 南紀熊野ウェブサービス(大阪、新宮市)

max_allowed_packet = 32M

↓

今度は下記エラーが発生。

ERROR 2013 (HY000) at line xxx: Lost connection to MySQL server during query

対策
↓

Importing 1GO SQL File => ERROR 2013 (HY000) at line 23: Lost connection to MySQL server during query - Stack Overflow

max_allowed_packet = 1100M
net_write_timeout = 300

↓

駄目。次。

ERROR 2013 (HY000): Lost connection to MySQL server during query - MySQL

innodb_force_recovery = 4

↓

下記エラー。

ERROR 1051 (42S02) at line xx: Unknown table 'xxxxx.xxxxx'

↓

これは?

ERROR 2013 (HY000): Lost connection to MySQL server during query - Dev Shed

innodb_force_recovery = 3

↓

同じエラー。innodb_force_recoveryはやめる。

↓

MySQL Lists: mysql: Re: ERROR 2013 (HY000): Lost connection to MySQL server during query

connect_timeout = 6000

単位は秒?

↓

駄目。

↓

【結論】原因は、メモリ不足だった。

2011年6月30日木曜日

Windowsで git 調査メモ

とりあえずローカルのみで使ってみたい。


インストール

  1. msysgitをインストール
  2. tortoisegitをインストール
  3. ユーザー名とメールアドレスをセット(settings → Git → Config)


要調査事項


日本語のファイル名が扱えないと、ドキュメントの管理に使えない...
Bazaarを使うか。

2011年4月11日月曜日

PHPのエラーメッセージのマニュアルへのリンクを変更する

PHPのfunctionでエラーが発生すると、エラーメッセージが該当するfunctionへのリンクになる場合がある。

array_merge('foo');
↓
Warning: array_merge() [function.array-merge]: Argument #1 is not an array in /var/www/html/test.php on line 2

このリンクのリンク先は、デフォルトでは有効なURLではない。

php.ini等でマニュアルの場所を指定してあげると、マニュアルの該当functionへのリンクにすることができる。
ini_set('docref_root', 'http://jp.php.net/manual/ja/');
array_merge('foo');
↓
Warning: array_merge() [function.array-merge]: Argument #1 is not an array in /var/www/html/test.php on line 3

このエラーメッセージをブラウザで見る場合は便利な場合もあるかもしれないが、このエラーメッセージはそのままエラーログにも出力されるので、エラーログが余計に増えてしまう。
(エラーログ上のマニュアルのURLを使うなら便利かもしれないが。)
このリンクを抑制するにはhtml_errorsをOffにする。
ini_set('html_errors', false);
array_merge('foo');
↓
Warning: array_merge(): Argument #1 is not an array in /var/www/html/test.php on line 3

すっきりしたね。


参考:PHP: 実行時設定 - Manual

2011年3月31日木曜日

「lexicon (XLLEX.DLL)が見つからないか、または壊れています。」の修復

Windows XPでMS Office 2007のアプリを起動できなくなった問題に対して、試行錯誤した上で何とか回復できたことのメモ。
回り道が多くて余分なこともしてると思うが、誰か(あるいは自分)の役に立つかもしれないので記録しておく。


いつものようにExcelを開こうとすると「lexicon(XLLEX.DLL)が見つからないか、または壊れています。」というエラーメッセージが表示され、Excelが開けない。
また、Wordも開かなくなっている。(開こうとすると何も書かれていなくてOKボタンしかないダイアログが表示される。)
XLLEX.DLLというファイルはOfficeのフォルダにあるので、レジストリがおかしくなっている?
↓
Googleで調べてみたが、Windowsを再インストールするか、あるいはWindowsユーザーを新しく作り直すしか対策が見つからない。(それは嫌だ。)
↓
「プログラムの追加と削除」でOfficeをアンインストールして、OfficeのインストールCDから再インストール。しかし状況変わらず。何回か繰り返したが駄目。
↓
Windowsの「システムの復元」を使って、Excelが開けた頃にWindowsを戻す。
↓
Excelを立ち上げようとすると、これまでとはまた別のエラーが出るようになった。
それに対してOfficeを再インストールしようと試みるも、そもそもアンインストールができない。

  • 「プログラムの追加と削除」から「変更」「削除」ボタンを押しても、数秒固まるだけで何も起きない
  • OfficeのインストールCDのSetup.exeを起動すると、インストールエラーが発生して終了してしまう
この状態でインストールしようとしてもエラーになってインストールできない。
↓
Microsoft Office 2007をアンインストール(削除)ができない|星屋工作室で紹介されているMSのサイトの「Fix it で解決する」というのをダウンロードして実行したら、Officeをアンインストールできた。
↓
CDからOfficeを再インストール。
↓
ExcelもWordも使えるようになった!


もしかしたら最初からFix itを使えば解決したのかもしれない。
Office2007だけでなく、2003や2010もアンインストール用の「Fix it」があるようだ → コントロール パネルからアンインストールできない場合、Office 2003、Office 2007 または Office 2010 スイートをアンインストールする方法


また、この後Microsoft UpdateによるOffice2007 SP2のインストールがどうしても失敗する事象が発生。
↓
Office2007のサービスパックが当たらない - りぶろくを参考にWindows Installer 4.5をダウンロードしてインストール
↓
SP2もインストールできた。

2010年11月21日日曜日

PHPで 「Webページの有効期限が切れてます」となる時の傾向と対策

PHPでフォーム等を作った場合、Webブラウザの戻るボタンやJavaScriptのhistory.back()で前のページに戻った時に「Webページの有効期限が切れてます」と表示されることがある。

上記はIEの場合で、ブラウザによって少し挙動が違う(下記)。
いずれもページを更新(リロード)するとサーバにPOSTが再送信され、ページが表示される。
  • IE
    • 上記(IE8の例)のような画面が表示される。
  • Firefox
    • 「このページを表示するにはフォームデータを再度送信する必要があります。フォームデータを再送信すると以前実行した検索、投稿や注文などの処理が繰り返されます。」という確認ダイアログが表示され、「再送信」ボタンと「キャンセル」ボタンが表示される。「再送信ボタン」をクリックするとページが表示される。
  • Chrome
    • 「フォーム再送信の確認
      このウェブページを正しく表示するには、先ほど入力したデータが必要です。データをもう一度送信することは可能ですが、このページで行った操作をすべて繰り返すことになります。データを再送信してこのページを表示する場合は [再読み込み] をクリックしてください。」というメッセージのみの画面が表示される。
  • Safari
    • このようなダイアログが表示される。(Windows版で確認。Mac版は分からない。)



犯人はだれだ?


原因は、PHPでSESSIONを使うと(デフォルト設定では)自動でキャッシュ制御用のHTTPヘッダーが送出され、それによりクライアント側のキャッシュが使用不可にされるため。(参考:floatingdays: PHPでブラウザキャッシュを有効にする)

つまり、下記条件を全て満たした場合にこの現象が発生する。
  1. HTTP POSTで遷移してきた。
  2. SESSIONを使っている。(session_start()してるか、php.ini等でsession.auto_start=1に設定している。)
  3. 次のページに行ってから、ブラウザの履歴機能(JavaScriptのhistory.back()を含む)で戻ってきた。



じゃあどうすればいいの?

対策として有名なのは、session_start()する前に、session_cache_limiter('none')とすること。
session_cache_limiter('none');
session_start();
これにより、SESSIONを使っても余計なHTTPヘッダーが送出されなくなる。

または、php.ini等でsession.cache_limiterに"none"を設定しても同じことになる。(おそらく元ネタはこのあたりだろう → PHP: session_cache_limiter - Manual )

実際にこれで問題は解決する。



異論反論オブジェクション! [shut very bad!]

しかし、「PHP/「ページの有効期限切れ」対策 - Glamenv-Septzen.net」によると、これはPHPが想定しているパラメータではなく、お行儀のよいやり方ではないらしい。

'none'というパラメータは正しいパラメータではなく、それゆえに何もHTTPヘッダーを送出しないという挙動になるらしい。
(ただし、もし「規定外のパラメータはスルーする」というのが意図した仕様だとしたら、'none'でも何でも「正しいパラメータ」だけど。)

上記の記事ではsession_cache_limiter('none')ではなくsession_cache_limiter('private_no_expire')を推奨している。
「「ページの有効期限切れ」をsession_cache_limiter()で解決 - shinyanakaoのよすがブログ」でも同様にprivate_no_expireを推奨している。

しかし、実際にsession_cache_limiter('private_no_expire')を使うと、やはり余分なHTTPヘッダーが送出される。

private_no_expireの場合、(privateに比べて)Expiresが送出されなくなるが、「Cache-Control: max-age=(session.cache_expire ぶんだけ未来)」が送出されるため、やはりブラウザに影響が出てしまう。(参考:現在のキャッシュリミッタを取得または設定する - PHP 5.3 日本語マニュアル)
Firefoxでは問題ないが、IEだとリロード時にもキャッシュを使ってしまい、サーバからのリロードができなくなるようだ。(参考:Webアプリケーション開発ラボ by NPO情報活用センター - PHP:キャッシュ問題について。、PHP Tips|ワークスポット・ジェーピー)
おそらくsession.cache_expireで設定されている期間はキャッシュが有効になるのだろう。(Expiresでそう指定しているのだから、IEは悪くない。)

なので、お行儀が悪くてもsession_cache_limiter('none')を使うしかないのでは?('none'じゃなくて'hoge'でも'hage'でも「正しい」パラメータ以外なら何でもいいけど。)



新たな選択肢

しかし、こういう手もあるよ。
session_start();
header('Expires:'); //下記「余談」の追記も参照
header('Cache-Control:');
header('Pragma:');

header()でセミコロンの右に何も書かないと、PHPは何も送出しないようだ。
これにより、session_start()のHTTPヘッダー送出を上書きし、結果的に何も送出しない。

session_cache_limiter('none')より冗長だが、明示的という意味ではいいかもしれないと思っている。
(キャッシュを有効にしたい場合にも応用が効く。)



余談

上記のようにブラウザキャッシュの無効化を無効化すると、当然ながらSESSIONの最新情報が反映されていないブラウザキャッシュをブラウザが表示してしまうので注意。

(2011/1/7 追記)
IEはキャッシュがあり、かつ、そのキャッシュがExpiresを何も指定されていないと、アドレスバーにURLを直接入力された場合やリダイレクトした場合などにサーバにアクセスせずにキャッシュの方を使ってしまう。(Firefoxはその場合もサーバにアクセスしてくれる。)
ブラウザの履歴機能を使うためにキャッシュはさせたいが、上記の場合にはサーバにアクセスさせたい場合は、Expiresで-1を指定すると良いようだ。
header('Expires: -1');
ログイン管理をする場合などはこれをやっておいた方が良さそう。
(追記終わり)

また、POSTのパラメータに「チケット」(=ワンタイムトークン)を入れることによる二重POST防止を推奨するのは正しい。というか二重POSTを確実に防ぎたいと思ったらこれしかない。


2009年11月6日金曜日

PHPで Fatal Error時の状況を調べる方法

PHPでFatal Errorが発生すると以降の処理が実行されない。
かつ、try/catchやset_error_handler()ではFatal Errorを捕まえられない。
なので通常は、Fatal Errorが起きたときの詳しい状況はログに残らない。
(例えばエラーが起きたPHPのファイル名はログに残るが、それを呼び出した側のPHP名や、データの状況は分からない。)

しかし、register_shutdown_function()を使えばエラーが起きたときの状況をログに残せる。

register_shutdown_function('shutdownHandler');

function shutdownHandler(){
$error = error_get_last();
if ($error['type']) { //エラーの場合のみ
error_log(...); //必要な情報を書き出す。
}
}

ただしこれだとE_NOTICEとかでもひっかかってしまうので、Fatal Errorだけを拾いたい場合はtypeを指定する。
register_shutdown_function('shutdownHandler');

function shutdownHandler(){
$error = error_get_last();
if ($error['type'] == E_ERROR) {
error_log(...); //必要な情報を書き出す。
}
}
これだとExceptionが拾えない?


参考:
PHP の「エラー処理ハンドラ」「シャットダウンハンドラ」「例外処理ハンドラ」の挙動 - Web/DB プログラミング徹底解説
PHP: register_shutdown_function - Manual

CSSフレームワーク YAMLと Highslide JSは相性が悪い

CSSフレームワークのYAMLとページ内ポップアップライブラリのHighslide JSを併用したら、IEで見た場合のみHighslideの表示がおかしくなった。

参考情報を探したが、ドイツ語しか見つからない...


結局解決していない?


具体的には、2カラムの右側(div#col3)にあるリンクをクリックしたらHighslideがポップアップするようにしたら、IEの場合だけ"Loading"の表示が画面の右の方にずれてしまう。
場合によっては画面の外にまでずれてしまい、その時だけ横スクロールバーが出るような状況に。

Firebug Liteなどを使って調べていたら、どうやらLoadingのCSSプロパティleftの値がおかしいらしい。
Highslideは、Loadingの位置を計算で求めている。
その際に、offsetLeftを積み上げてleftを計算する。積み上げるというのはリンクからoffsetParentをたどっていき、そのoffsetLeftの合計を求める。(scrollLeftの考慮もしている。)
で、このoffset系のプロパティは、ブラウザによって挙動が違うらしい。

実際にlinkのleftの計算に使われるoffsetParentとoffsetLeftを表示させてみると、Firefox(3.5)とIE(7)ではかなり内容が違う。
まずFirefoxの方はたどるoffsetParentが少ない。すぐにBodyにたどりつく。offsetに関連しない要素は無視するようだ。
対してIEはoffsetに関連しない要素も全部拾う。何が関連するかの判断もFirefoxとはかなり違う。
さらに、IEではdiv#col3の子要素のoffsetLeftの値がおかしい。
具体的には、div#col3の子要素は、正しいoffsetLeftの値に加えて、なぜかdiv#col3のoffsetLeftの値が加算されている。
これにより、LoadingのLeftがdiv#col3のoffsetLeft分だけ右にずれてしまうようだ。

ここで、上記の参考サイトを見て、div#col3のpositionプロパティを変えたらなんとなかるかなあと思い実験。
FirefoxのFirebugで調べたところ、div#col3はpositionを指定していないので、デフォルトのstaticのはず。
が、IEでFirebug Liteで調べたところ、なぜかrelativeになっている。IE用のパッチのCSSの影響?
そこで、div#col3のpositionにstaticを指定したら、Loadingがリンクと同じ位置に表示されるようになった。
(たぶん)position:staticの場合、offsetParentの対象でなくなるようだ。これにより、div#col3のoffsetLeftが重複して加算されることを回避できた。

2009年8月12日水曜日

Railsの GetText 2.0でサーバが起動しないエラーの対応メモ

レアなケースだろうけど一応メモ。


(参考:RailsでGetText)
Rails のためのものぐさな Web アプリケーションの国際化手法 - 川o・-・)<2nd lifeが参考になる。
ただしGetText 2.0からはenvironment.rbで読み込むgemが変わったので注意。

config.gem "locale_rails"
config.gem "gettext_activerecord"
config.gem "gettext_rails"



ActiveRecordもActionMailerも使わないので、config/environment.rbで不使用にしていた。
config.frameworks -= [ :active_record, :action_mailer ]

gettext(2.0)を使うために、下記をgemでインストール。
locale
locale_rails
gettext
gettext_rails
ActiveRecordは使わないのでgettext_activerecordは入れなかった。

アプリケーションにgettextを使う設定を入れて、mongrelを起動しようとしたがエラーになって起動できない。
ruby server/script
↓
.../lib/active_support/core_ext/module/aliasing.rb:33:in `alias_method': undefined method `create!' for class `ActionMailer::Base' (NameError)

ActionMailer?使ってないけど?
しょうがないから不使用指定を外す。
config.frameworks -= [ :active_record, :action_mailer ]
↓
config.frameworks -= [ :active_record ]

これでも駄目。
試しにgettext_activerecordをインストール。
これで起動したら起動できた。

もう1つ試しにgettext_activerecordのrequireをコメントアウトしたら起動しなかった。


結論:RailsでGetTextを使う場合、不要でもActionMailerを外しては駄目。かつ、不使用でもgettext_activerecordが必要。

Windows + Ruby 1.8.7 + Rails 2.3.3 + MySQL 5.4.1 環境構築メモ

備忘録として。


前提として、以前Railsを試したことがあるので、下記は事前にインストール済みだった。

  • Ruby 1.8.6(One-Click Installer版)
  • Ruby Gems
  • MySQL 5.4.1(Beta)


やったことの手順
  1. Gemsでインストール済みのgemを全てupdate。Railsが2.3.3になった
  2. Release - Ruby-mswin32 (ja)からWindows用の1.8.7のZIPをダウンロードし解凍、既存のRuby(1.8.6)のフォルダに上書きコピー
    (1.8.6のままではエラーが起きる)
  3. このままではdb:migrateする時に下記のエラーが出る。(MySQLの5.1以降に対応していないらしい)
    rake aborted!
    Mysql::Error: Commands out of sync; you can't run this command now: SHOW TABLES
    そこで、PHP5.2のフォルダからlibmysql.dllをコピーしてきてRubyのbinフォルダに入れると解消した
    (参考:Aptana Forums • View topic - Fixed: Commands out of sync)

2009年7月4日土曜日

PHP5.3だと CakePHPで Deprecatedエラーが出まくる問題の対処方法

PHP5.3ではE_ALLにE_DEPREATEDが含まれるので、こんなエラーが出まくる。

PHP Deprecated: Assigning the return value of new by reference is deprecated in ...

そこで、cake/libs/configure.phpの290行目あたりに下記の処理を入れればDeprecatedエラーが出なくなる。
if (isset($config['debug'])) {
 if ($_this->debug) {
  error_reporting(E_ALL);
  //この下のIF文を追加する
  if (error_reporting() > 6143) {
   error_reporting(E_ALL & ~E_DEPRECATED);
  }

ついでに、php.iniでのerror_reportingは「E_ALL | E_STRICT」にしてるけど、CakePHPではE_STRICTが出て嫌だという場合には、httpd.confまたは.htaccessにてCakeのディレクトリのみ下記のようにerror_reportingを設定すればOK。(この値はPHP5.3の場合)
php_value error_reporting 22527


この問題については#6026 (php 5.3 needs error_reporting(E_ALL & ~E_DEPRECATED);) - CakePHPでCakephp1.3に回されて、php 5.3 compatibility? - CakePHP | Google グループでは黙殺されている?


(2009/07/13 追記)
SimpleTestを使う場合、app/webroot/test.phpの28行目あたりにも下記を追加するとテスト時にDeprecatedが出なくなる。
error_reporting(E_ALL);
//この下のIF文を追加する
if (error_reporting() > 6143) {
error_reporting(E_ALL & ~E_DEPRECATED);
}
set_time_limit(0);
(追記終わり)


参考:
 PHP: 定義済み定数 - Manual (エラー定数のバージョンごとの値)

2009年3月27日金曜日

PHPの ZipArchiveの open()に失敗する問題の解決方法

下記のようにPHPでZIPを作成する処理。

$zipArc = new ZipArchive();
$zipArc->open($path, ZIPARCHIVE::OVERWRITE);

以前は普通に実行できたのに、PHPをバージョンアップしたらできなくなっていた。

PHP: ZipArchive::open - Manualに解決策が書いてあり、それに従って下記のようにコードを変えたら実行できるようになった。
$zipArc = new ZipArchive();
$zipArc->open($path, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE);

キーワードが少なくてGoogle検索し辛い問題だった。

ちなみに、定数の値は下記のようになっていた。
ZIPARCHIVE::CREATE = 1
ZIPARCHIVE::OVERWRITE = 8

2009年2月11日水曜日

バッチ処理でWindowsのサービスを再起動する(応用編)

バッチファイルでWindowsのサービスを再起動する方法を使えば、タスクに登録したスケジュールで定期的にWindowsのサービスを再起動できる。
でも、Apacheなんかはたまに停止時にゴミプロセスが残っていたりして、直後の起動に失敗することがある。

そこで、起動を何度かリトライするようにしてみる。

@ECHO OFF

SET service_name=apache2

NET STOP %service_name%

SET max_count=3
SET loop_count=0

:service_start
 NET START %service_name%

 REM STARTできたら終わり
 IF %errorLevel% == 0 GOTO service_restart_end

 ECHO start失敗 (error level %errorLevel%)
 SET /A loop_count=%loop_count% + 1
IF NOT %loop_count% == %max_count% GOTO service_start

:service_restart_end

for文では変数の遅延展開がある(参考floatingdays: コマンドプロンプトで繰り返し処理)のに注意。(なのでGOTOを使ったループにした。)
また、GOTOを使ったループでは、間違えて永久ループにしないようにも注意。


関連記事:
 floatingdays: バッチファイルでWindowsのサービスを再起動する方法
 floatingdays: コマンドプロンプトで繰り返し処理


参考:
 コマンドプロンプトを使ってみよう! -バッチファイル-
 コマンドプロンプトで実行ファイルの戻り値を取得する:システム開発メモ:So-net blog

2009年1月22日木曜日

Google ChromeでなぜかQueryStringを含むURLを見られないと思ったら

ChromeでQueryStringを含むURLを見ようとするとしばしば「404 Bad Request」になってしまうことがあり、調べたらIEと同じ現象らしい。

/~sugano/ » Google ChromeのDigest認証

IEへの対応は、Apacheいじり始めてすぐに入れたのでそういうものだと思ってたけど、まさかこんなところで再開するとは。

2008年12月6日土曜日

Googleの Sitemapにフィードを登録する場合の注意点






Google ウェブマスター ツールではSitemapとしてフィードを登録することができるが、いくつか注意点が。


1. 登録できるフィードはRSS2.0かAtom1.0のみ
 参考:
  雑記帳?一応Weblog - Atom 1.0キボン
  サイトマップの作成 - ウェブマスター向けヘルプ センター


2. Atom1.0を登録する場合、各エントリーにpublished(作成日)要素が必要
 publishedが無いとエラーになる。
 Atom1.0の仕様としてはupdatedは必須だが、publishedは必須ではないのだが。
 参考:
  Error in parsing sitemap for Atom Feed - Invalid XML tag - Sitemap Protocol | Google グループ
  RFC 4287 The Atom Syndication Format 日本語訳 - futomi's CGI Cafe (Atom1.0仕様書の和訳)

(2008/1/7 追記)
いつの間にか、Atom1.0でエントリーにpublishedが無くてもエラーにならなくなっていた。

PHPのmb_send_mail()でのSMTPエラー(550 5.7.1)の解消方法

PHPのmb_send_mail()からIISの簡易SMTPサーバを使ってメールを送信しようとしたとき、下記のエラーが発生。

PHP Warning: mb_send_mail() [<a href='function.mb-send-mail'>function.mb-send-mail</a>]: SMTP server response: 550 5.7.1 Unable to relay for ...

原因はSMTPサーバがデフォルト設定で、中継を許可していなかったため。
中継を許可するIPアドレスに127.0.0.1を加えたらメールが送信できるようになった。

ブログ アーカイブ

tags