トップページphp
1001コメント327KB

【PHP】下らねぇ質問はここに書き込みやがれ 50

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/07/11(水) 17:50:01ID:fYd+34US
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 49
http://pc11.2ch.net/test/read.cgi/php/1182794620/

◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0202nobodyさん2007/07/15(日) 13:46:16ID:???
>>200
各ループの$string_line1と$string_line2はどうやって取得するのよ
毎回同じ内容じゃないんだべ?
0203nobodyさん2007/07/15(日) 14:00:02ID:RgVfRGye
>>202
$fp = fopen("$op", 'r');
$string_line1 = fgets($fp);
$fp = fopen("$en", 'r');
$string_line2 = fgets($fp);

このようになっています

ちなみに今現在、多次元配列を試しています
0204nobodyさん2007/07/15(日) 14:07:11ID:L0tNCdex
大量のデータを処理するphpのプログラムがありまして、
一回起動をかけますと、終了するまで7時間程度かかります。

しかも、このプログラムが負荷が高いため、実行して20分程度経過しますと、
CPUの温度が75度を超えBIOSから異常を知らせるメッセージが表示されっぱなしになり、
焦げ臭い嫌な臭いが部屋中に立ち込めてしまいます。

仕方なく、1000件数処理するごとにsleepコマンドで60秒自動休止するような
やり方にしているのですが、他にいい方法はないでしょうか?
スクリプト言語なのでしょうがないかもしれませんが、いいアイデアを頂けると幸いです。
宜しくお願いします。
0205nobodyさん2007/07/15(日) 14:15:01ID:???
>>203
うーん。ループさせてる範囲を{ 囲んで }みて。

$fp = fopen("$op", 'r'); $string_line1 = fgets($fp);
$fp = fopen("$en", 'r'); $string_line2 = fgets($fp);

$on_array = explode(",", $string_line1); $off_array = explode(",", $string_line2);

$op[$d]= $on_array; $ed[$d]= $off_array;
0206nobodyさん2007/07/15(日) 14:16:21ID:???
>>205
ありがとうございます、それを参考に頑張ります
0207nobodyさん2007/07/15(日) 14:17:45ID:???
安価ミス
0208nobodyさん2007/07/15(日) 14:19:18ID:70v71ZEE
>>201
ダメだった。うーむ

>>204
無茶しすぎじゃね?

>>203
配列の名前を変えてみたら
パスと配列の変数名が同じだからじゃないの
02092052007/07/15(日) 14:20:30ID:???
「どこからどこまでがループなのよ。同じものを explode して $op[$d] に入れてない?
ていうか、毎回 fopen してたりもしない?」
というのが知りたくてループ範囲を示して欲しかっただけなんだけど、

頑張るのはいいことだと思います。
0210nobodyさん2007/07/15(日) 14:24:30ID:???
>>208
imagesavealpha()は使ってるよね?
0211nobodyさん2007/07/15(日) 14:25:20ID:???
>>204
マジレスで、プログラムの組み方に問題が無いのなら
低発熱の速いCPUに換えて冷却をしっかりする。 会社なら空調を何とかする。
CPU使用率100%で20分連続稼働出来ないのは異常

それ原因ってphp側というより
DB側のインデックス不備とか 結合の仕方が悪いSQLとかに原因有るんじゃないか?
phpでぶん回して集計かけるんじゃなくて、ストアドプロシージャ使ったり出来ないの?

後は、
sleep(60) じゃなくて ループ内で usleep(5000) とか、
メモリ使い切ってswapアウトしてしまうのなら、適宜不要になったarrayを明示的にunsetするとか。
とりあえずsarで計測したりしながら何がボトルネックか探ったら?
0212nobodyさん2007/07/15(日) 14:33:33ID:RgVfRGye
>>209
なんとか多次元配列で解決できましたお騒がせして申し訳ありません
それと、ありがとうございました。
0213nobodyさん2007/07/15(日) 14:40:30ID:L0tNCdex
>>211
詳しいレスありがとございました。
言われてみると、プログラムというよりハードかもしれませんね。

プログラムは、画像データから特定のパターンを識別するために、
膨大な計算量を必要とするプログラムを組んでいまして、
アルゴリズム的にこれ以上スマートにするのが難しいのが現状です。

CPUが2年前のものなので、買い替えを検討したいと思います。

あと、度々で恐縮なのですがsleepとusleepは引数の単位が違う以外に
内部的な処理で違うものなのでしょうか?マニュアルを見たのですが、
エイリアスでもないようなので、教えていただけたら幸いです。

あと、sarを検索で掛けたのですが、それらしいものが引っかからなかったのですが、
これはベンチマークの計測ソフトとかでしょうか?
0214nobodyさん2007/07/15(日) 14:56:25ID:???
>>213
PHPでやってるのかぁという感想は置いておいて、

usleepはsleepとは単位が違うだけ、(文字通りマイクロ秒単位でスリープ指定できる)

sarについてはとりあえず
ttp://www.atmarkit.co.jp/flinux/rensai/root07/root07b.html のsysstatの項とかを参照してみて。
0215nobodyさん2007/07/15(日) 15:50:04ID:???
C禁止
0216nobodyさん2007/07/15(日) 16:38:40ID:???
すいません、ちょっと教えていただきたいですが、
class className{
function fnc(className $var){
$this->var = $var;
return $var;
}
}
上記のとき、fnc(className $var)の箇所の、className $varは何を
意味するのでしょうか?
良かったら教えてください。
0217nobodyさん2007/07/15(日) 16:40:05ID:???
>>216
http://www.php.net/manual/ja/language.oop5.typehinting.php
0218nobodyさん2007/07/15(日) 17:25:13ID:???
引き続き回答お願いいたします
0219獅子王2007/07/15(日) 17:37:04ID:EW+ZDItZ
お久しぶりです。実は最近ホームページなどに掲示板を設けたいと思い、
perlをダウンロードしようと思うのですがそのダウンロードサイトでどのようにすれば
ダウンロードできるのかわかりません。どなたか教えてはくださいませんでしょうか?
0220nobodyさん2007/07/15(日) 17:52:32ID:???
芯でください
0221nobodyさん2007/07/15(日) 17:54:50ID:EKF0p7g8
50x50から半径20ピクセルの円を書きたいのですが
どのような計算式で書けばよいのでしょうか?
0222nobodyさん2007/07/15(日) 17:56:09ID:???
まずは試行錯誤しなさい。
クレクレはスレ違い
0223獅子王2007/07/15(日) 17:57:12ID:EW+ZDItZ
あ、あの・・・。なんだか知らないけどスイマセンでした。
0224nobodyさん2007/07/15(日) 18:35:26ID:70v71ZEE
>>210
回転させるリソース(a)と、回転させた後のリソース(a_dash)にも一応使ってる。
bgd_colorの透明度を最大にすると全体が黒くなって、不透明にすると回転縮小した部位の背景が黒くなる
みたかんじ余白はbgd_colorを黒に重ねた色になる。これだと透明にできない
けれど、もとの画像リソース(a)は出力すれば背景はちゃんと透明で黒くない

どうなっているんだろうか


>>221
imageellipse()かimagefilledellipse()あたりでいいんじゃない
0225nobodyさん2007/07/15(日) 20:43:31ID:EKF0p7g8
>>224
ありがとうございます
ですが、関数を使わずにドット打ちでやりたいのです
0226nobodyさん2007/07/15(日) 23:35:24ID:y01L4ZmB
pearのauthっていう認証機能は実用に耐えますか?
セキュリティの向上を考えるとき、気をつけなきゃいけないこととかありますか?
0227nobodyさん2007/07/16(月) 00:28:52ID:???
>>225
sinもつかっちゃだめ?つーか課題くらい自力でやれ
0228nobodyさん2007/07/16(月) 00:47:32ID:1gpeo49m
>>227
課題じゃないんです_| ̄|○
0229nobodyさん2007/07/16(月) 01:32:48ID:???
>>228
課題じゃないのになんでそんな面倒な事しなきゃいかんのか分かんないけど
25,25を中心として

for($i =0;$i<2*_PAI;$i+=_PAI/50)
ドット描画(floor(25+20*cos($i)),floor(25+20*sin($i)));

なかんじでいいんじゃね?円周率が_PAIだったかどうか怪しいが。
ステップ数は間が空くようなら適当に変えて。
0230nobodyさん2007/07/16(月) 02:00:43ID:???
ドットはimagesetpixel()とあるね。
ラジアンはM_PIで得られたと思う
0231nobodyさん2007/07/16(月) 02:15:31ID:AMhU9hfC
下のようにループの中で2次元配列にデータを格納したいんですが、
2週目に入った時に$code[0]のデータがクリアされてしまいます。
配列の使い方が間違っているのでしょうか?
サーバはFreeBSDでPHPは4.4.6です。

for($code=0;$code<3;$code++){
$dat=array($code=>array($d[0],$d[1],$d[2]);
}
0232nobodyさん2007/07/16(月) 02:31:56ID:???
そりゃあクリアされるだろ。
配列じゃんえんだもん

つ$dat[]
0233nobodyさん2007/07/16(月) 04:53:48ID:???
ちょっと思い浮かばないのですが、

$array = array("みかん"=>"3","なし"=>"2","さくらんぼ"="5");

だとして、

さくらんぼ:5
みかん:3
なし:2

という表示にしたいと思います。keyの数字を降順にして上の表な表示に
することって出来るのでしょうか?出来る場合は、関数などを教えて下さい。
0234nobodyさん2007/07/16(月) 05:17:53ID:???
IDだしてから答える
0235nobodyさん2007/07/16(月) 05:21:30ID:???
配列の作り方も突っ込み満載だがID出すまで回答保留
0236nobodyさん2007/07/16(月) 06:28:23ID:eChNNpaq
textareaとinputのtextに文字列を表示する場合、htmlspecialcharsはかまさなくてもXXSの危険性はないと考えてよろしいでしょうか?
0237nobodyさん2007/07/16(月) 07:31:59ID:OjCJuTb6
質問です
php_mbstring.dll が見つからないというエラーが発生して困っています。
php.iniで extension_dir = "C:/php/ext" も確認して、実際のファイル構造と
一致してるようなんですが、、 なにが原因でしょう
教えてください、よろしくおねがいします
0238nobodyさん2007/07/16(月) 07:33:35ID:???
phpinfoにmbstringが使えるかどうかみた?
0239nobodyさん2007/07/16(月) 07:39:04ID:???

>>231
もうすこしヒントをやる。


あとは書き換えてつかってみれ



for($i=0;$i<3;$i++){

$dat[] = array($i=>array(1,2,3));

}


echo "<pre>";

print_r($dat);

echo "</pre>";
0240nobodyさん2007/07/16(月) 08:14:01ID:OjCJuTb6
>>238
ありがとうございます
extension=php_mbstring.dll
の部分ですよね  コメントアウトも解除してると思うんですが、、なにがおかしいのかなぁ… 
いろんなサイトを見るとextension_dir = "C:/php/ext" の"を書いてないのもあったり、
ext/ としてるのもありで、全部試してるんですが、、
0241nobodyさん2007/07/16(月) 08:21:48ID:???
バージョンは?
0242nobodyさん2007/07/16(月) 08:22:20ID:???
>>233
arsort($array);
0243nobodyさん2007/07/16(月) 08:22:39ID:???
phpinfo();を実行してmbstringが使えるかチェックしたの?
02442402007/07/16(月) 08:34:08ID:OjCJuTb6
ごめんなさい 詳細を書きます。 winXP apache2.0 php5.2 です。
phpinfoによれば以下のようになっています

extension_dir C:\php\ext\
mbstring
Multibyte Support enabled
Multibyte string engine libmbfl
Multibyte (japanese) regex support enabled
Multibyte regex (oniguruma) version 4.4.4
Multibyte regex (oniguruma) backtrack check On

今、pearのインストールをしてるんですが、cmd でgo-pearを
実行すると「php_mbstring.dll が見つからない」とアラートがでています
また、cmd内でも「ext\php_exif.dllがない」とでます。→ちゃんと存在してます
0245nobodyさん2007/07/16(月) 08:52:55ID:???
>>244
pearに関してはgo-pear.batでググって最新版を入手

エラー内容ぐらいは書いてください
02462402007/07/16(月) 09:18:30ID:OjCJuTb6
>>245
度々すみません エラーは
「PHP Warning: PHP Startup: Unable to load dynamic library 'C:\php\ext\php_exif.d
ll' - 指定されたモジュールが見つかりません。
in Unknown on line 0」
といった感じです(これのファイル違いがいくつもでてくる)
go-pear.pharの最新版も入手済みです
失礼ですが、確認のため質問させてください go-pear.bat自体を新しくするんですか?
0247nobodyさん2007/07/16(月) 09:27:04ID:???
go-pear.pharだけでおk

windowsの環境変数でパスを通せ。それでも解決しなかったらまた考えてやる
02482402007/07/16(月) 09:52:26ID:???
すみません 環境変数を理解できてないので質問させてください
すでに C:\Program Files\MySQL\MySQL Server 5.0\bin\mysql.exe が
指定されてるんですが(ユーザ変数)
C:\Program Files\MySQL\MySQL Server 5.0\bin\mysql.exe;C:\php\go-pear.bat
でいいのでしょうか?
これで試してみてもうまくいかないですが…
設定後、cmd の set で確認すると、
PATH=;c:\mysql\bin;C:\Program Files\QuickTime\QTSystem\;C:\Program Files\MySQL\M
ySQL Server 5.0\bin\mysql.exe;C:\php\go-pear.bat
となってました
0249nobodyさん2007/07/16(月) 10:02:25ID:???
C:\php\ext\をパスに追加
02502402007/07/16(月) 10:33:49ID:???
>>249
ありがとうございます。言われたとおりにしたところ、相変わらずうまくいかないですが
アラートダイアログのメッセージが変わりました!
(mb_string.dllが見つからない というのが出なくなりました
isqlt09a.dll OCI.dll libcs.dll が見つからない というアラートはでます)
問題が発生したため、CLIを終了します というメッセージが出ました
以下のcmdのエラーメッセージは相変わらず出ます。
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\php\ext\php_filepro.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\php\ext\php_ifx.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\php\ext\php_oci8.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\php\ext\php_oracle.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\php\ext\php_sybase_ct.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
続行するには何かキーを押してください . . .
------
なんなのかなこりゃ、、もうPHPの新バージョンを再インストールした方がいいんでしょうか?
02512402007/07/16(月) 10:35:10ID:???
ごめんなさい 間違えました>>250
×(mb_string.dllが
○(php_mbstring.dllが
0252nobodyさん2007/07/16(月) 10:43:17ID:???
ノーマルで入ってないプラグインもみかけるが、プラグイン拡張したの?
全部削除してphp.iniをいじらないで動作チェックしてみな
02532312007/07/16(月) 11:21:51ID:5Cp5+wVz
>>232
うまくいきました。
ありがとうございました。
02542402007/07/16(月) 11:26:39ID:???
>>252
ありがとうございます、プラグインの追加はしてません
今、php5.2.3をダウンロードして、php.iniを現行のものに上書きして、
;extension_ のコメントアウト解除 + extension_dir = "C:\php\ext\" だけ
やってgo-pear実行したんですが、変わらないです
やっぱりphp_mbstring.dllがない というアラートと、例のエラーが出ます
ちなみに>>251で書いた.dllのうち、php_filepro.dll以外は"php/ext"に入っています
この構成はDLしたphp5.2.3も変わらないです

まいりました…
0255nobodyさん2007/07/16(月) 11:42:36ID:???
上書きじゃなくて新規インストールしないと・・・
0256nobodyさん2007/07/16(月) 11:43:18ID:qpslan6h
URLエンコード関係で質問なんですが、

$url = "http://example.com/?下らねぇ質問";
echo rawurlencode($url);

UTF-8で保存し実行すると、
http%3A%2F%2Fexample.com%2F%3F%E4%B8%8B%E3%82%89%E3%81%AD%E3%81%87%E8%B3%AA%E5%95%8F
と出てきます。

これをdecodeすると、

$url = "http%3A%2F%2Fexample.com%2F%3F%E4%B8%8B%E3%82%89%E3%81%AD%E3%81%87%E8%B3%AA%E5%95%8F";
echo rawurldecode($url);

http://example.com/?荳九i縺ュ縺・ウェ蝠

といった感じに文字化けするのですがどうしてですか?
02572562007/07/16(月) 11:45:37ID:qpslan6h
と書いた直後に解決しました・・・
文字コード指定してなくてブラウザ側でShift_JISで表示されてました。
02582402007/07/16(月) 11:45:55ID:???
>>255
わかりました
もうphpを入れなおすことにしました
それでもうまくいかなかったらまた質問するかもしれないですが
しつこい質問に付き合ってもらってありがとうございました
0259nobodyさん2007/07/16(月) 12:31:25ID:FZx8tOaQ
すみません ereg系の関数使うとこういうエラーが出るのですが何ですか?
Warning: mb_ereg() [function.mb-ereg]: mbregex compile err: premature end of char-class in /home/htdocs/test/pc/index.php on line 209
0260nobodyさん2007/07/16(月) 12:40:30ID:???
>>259
エラーを読め、そしてソースを貼れ。
02612592007/07/16(月) 12:47:49ID:FZx8tOaQ
申し訳ありませんでした。ソースです。
if( MB_ereg("あいうえ",$name) ){略}
0262nobodyさん2007/07/16(月) 13:02:14ID:???
おまえらニュース。あらたなXSSが確認
http://d.hatena.ne.jp/harupu/20060328#p1
0263nobodyさん2007/07/16(月) 13:02:27ID:???
>>261
それ実際のソース?違うよね。
文字クラスが可笑しくてパターンコンパイル出来ないってエラーだから、
マッチパターンをちゃんと書いてくれないとどうしようもないよ。
0264nobodyさん2007/07/16(月) 13:15:13ID:???
>>262
あらたなXSSってだいぶ昔の記事だぞ。
ていうかこのスレにいるやつはたいてい知ってるだろ。
02652622007/07/16(月) 13:16:01ID:???
XSS検証
IEのみで確認。operaとfirefoxでは無効。
UTF-8でファイルを作っとくとIEでも無効

EUCとSJISで造ってる人はは対策すべし
02662622007/07/16(月) 13:19:00ID:???
ためしにhttp://www.yumemaboroshi.net/に登録されてるCGIスクリプトを無作為で選んでためしてみた。

10サイト中、7個はXSSが可能。

認知度が低すぎ
0267nobodyさん2007/07/16(月) 14:51:43ID:???
>>262
うちのサイトでも試すんで試験用のコード教えてくれい。
02682622007/07/16(月) 15:28:25ID:???
>>267

>>262のサイトから引用元みて
0269nobodyさん2007/07/16(月) 15:38:06ID:eChNNpaq
以下の一行に4つの値が5つ分ある配列を
ナンバーの若い順にソートしたいのですがうまくいきません。

ID、ナンバー、好きな食べ物、好きな音楽
1,330,apple,pank
2,1024,orange,laten
3,22,budou,heeling
4,35,banana,rock
5,1,kyuui,classic

コードはこちらです。
$ary[0] = array("1","330","apple","pank");

$ary[1] = array("2","1024","orange","laten");

$ary[2] = array("3","22","budou","heeling");

$ary[3] = array("4","35","banana","rock");

$ary[4] = array("5","1","kyuui","classic");



array_multisort($ary, SORT_NUMERIC);
お手つきでしたらご指摘よろしくお願いいたします。
0270nobodyさん2007/07/16(月) 15:44:09ID:???
カルタかよ
0271nobodyさん2007/07/16(月) 15:49:34ID:???
>>269
array_multisort()は列方向の配列が必要で面倒だから
usort($ary,create_function('$a,$b','return $a[1] - $b[1];'));
とかでいいんじゃね。
0272nobodyさん2007/07/16(月) 15:55:48ID:eChNNpaq
>>271
ありがとうございます。思ったとおりの結果になりました。
私にはこのコードがなにをしているのか理解できないのでマニュアル見て勉強してみます。
0273nobodyさん2007/07/16(月) 15:59:58ID:eChNNpaq
すごい!こんな便利な関数があったんですね。
2つも勉強させていただきました。ありがとうございます。
02742592007/07/16(月) 16:10:36ID:FZx8tOaQ
申し訳ありませんでした。ソースですがあいうえの所にはカタカナ3文字が
入ります。それ以外はソースそのままです。
if( MB_ereg("あいうえ",$name) ){略}
0275nobodyさん2007/07/16(月) 16:22:55ID:f3MIb3UO
画像アップローダをやってるんですが、ログを見ると
ダウンロードツールでjpegファイルを連続でダウンロードされてるみたいです。
回避できる方法はありますか?
ご存知でしたらお教えください。
m(__)m
02762752007/07/16(月) 16:24:54ID:f3MIb3UO
書き忘れました。
ずるぽんあぷろだを使っています。
0277nobodyさん2007/07/16(月) 16:52:19ID:???
>>274
だからなんでそれを書かないのかと。
SJISでゼとか入ってて[とバイナリが被ってるんじゃない?
mb_regex_encoding()でちゃんと文字コードを指定すること。
0278nobodyさん2007/07/16(月) 16:59:57ID:eChNNpaq
file関数でファイルの読み込みのみのページを作成し、
0.5秒おきに手動でリロードしているのですが、
CPUの負荷が50%を超えてしまいます。
fileの読み込みはあまりしないようなプログラミングを心がけるべきでしょうか?
何度も恐縮ですがお手つきでしたらアドバイスお願いいたします。
0279nobodyさん2007/07/16(月) 17:34:37ID:???
>>278
fileの読み込みに限って言えば、それだけでCPU負荷が高まるようなものではない。
CPU負荷は他の処理が影響していると思う。
0280nobodyさん2007/07/16(月) 18:33:35ID:???
無限ループでもしてんじゃね?
0281nobodyさん2007/07/16(月) 19:12:08ID:???
>>275
1)
UAとリファラを見るようにして、ツールのライトユーザーを弾く。
→ 弾いた場合はどこかにheader()で飛ばす

2)
閾値以上の連続リクエストにはウェイト(待ち時間)をわざと入れて、リクエストの負荷を減らす。

閾値を連続リクエストにはペナルティで 1秒 × 連続リクエスト回数累計の2乗 * 0.2 とか わざとsleep (待ち時間は適当)
とか、
閾値を超えた連続リクエストにはheader('HTTP/1.0 403 Forbidden');とか返すとか

UAもリファラも偽装できるから、スクリプトかかれたら弾けないけどね。
ダウンロードする側も、自作で上手にスクリプト組んだら実質防御出来ない。
0282nobodyさん2007/07/16(月) 19:17:34ID:???
IPアドレスかマックアドレスを見て弾けばいい。
後は、nec.co.jpやSOMY.CO.JPなどの大手ホストだけ特別に扱うなどの処理をするとか。
0283nobodyさん2007/07/16(月) 19:19:23ID:I4aE+UQm
DBのバックアップをするために、毎日指定した時刻にCRONでデータベース単位で圧縮し、GZIP圧縮しmail関数で、ファイルを添付してメールで送っております。

しかしGZIP圧縮した容量が20MB超えたら、PHPでメモリーリミットエラーがおきてしまいました。

現在PHPのメモリーリミットは256MBに設定してあります。

これ以上増やす事も出来ないのですが、何か代替策はないでしょうか?

FTP関数は許可していないので使えません。

同じサーバーにバックアップデータを置いておくとクラッシュしたときにバックアップごとふっとんでしまうので、別のサーバーもしくは手元に毎日置いておきたいです。

手動で毎日ダウンロードするって言うのはなしでおねがいします。 
0284nobodyさん2007/07/16(月) 19:27:03ID:???
>>282
MACアドレスなんてPHPでどう取得するんだ?
0285nobodyさん2007/07/16(月) 19:28:10ID:???
>>283
そもそも256に設定しているのに20で落ちるのがおかしいと思うけど。
あとは、毎日ではなく毎時でやるとか。
02862822007/07/16(月) 19:29:03ID:???
普通には取得できない。
PHPからCを呼び出して、Cで取得するしかない。
0287nobodyさん2007/07/16(月) 19:29:17ID:???
>>283
scp とか rsyncで 定期的にバックアップを取りに行く →詳細はそっちのスレを参照
0288nobodyさん2007/07/16(月) 19:29:50ID:???
>>283
全てをバックアップするんじゃくて、差分でバックアップしてみたら。
0289nobodyさん2007/07/16(月) 19:31:27ID:???
>>283
HTTP関数を許可しているのなら、HTTPプロトコルで別サーバーに転送するとか。
0290nobodyさん2007/07/16(月) 19:33:01ID:???
>283
まずハードから見直すことを考えましょう。
サーバーで重要なデータを扱う場合には、RAIDを組むのが普通です。
後は、DBのバックアップツールで別のHDDに定期的にコピーするとか
0291nobodyさん2007/07/16(月) 19:56:02ID:???
>>283
とりあえず案としてはテーブル単位でやってみたら

問題解決の手順として
本当にメモリーエラーなの? ってのが気になる。
本当なら、まずはどこでメモリーエラーになっているか調べなさいな
とりあえずそっからでしょ

>>288
差分でとるにしても
バックアップのスケジュールのどこかでフルバックアップしないと破綻するから
結局根本解決にはならんのでは ※今回のケースの場合な
0292nobodyさん2007/07/16(月) 20:09:06ID:???
>>283
普通はShellを使うんだけどねぇ・・・
PHPしか選択肢は無いの?
0293nobodyさん2007/07/16(月) 20:12:30ID:???
こないだもMACアドレスとかいってたやついたな。
0294nobodyさん2007/07/16(月) 20:17:26ID:???
これからIPアドレスもIPv4とIPV6と混在してくるから、
MACアドレスが主流になってくるよ。
02952832007/07/16(月) 21:03:22ID:uy8jxOc+
>>285
PHPのMemory_limitは間違いなく256MBです。
出来るなら毎時の方がいいのですが……とりあえず今は毎日でやっています。

>>287
scp、rsyncについて調べてみます。

>>288
差分バックアップは復元の時に、めんどそうですね。 案に考えて見ます。

>>289
HTTP関数だけで別サーバーに転送できるんですか?
別サーバーからfile_get_contentsやfopenでそのデータを開いて、そのサーバーに保存するとかではないですよね?

>>290
現在うごいているサーバーに新しく物を入れるのは……ちょっとためらってしまいます。
最初からRAID組んでおけばよかったですね…

>>291
テーブル単位だと……一番大きなデータベースで120個くらいのテーブルがあって、新機能と同時にテーブルも追加されているので、難しそうです。
telnetからCRONのシェル実行してやると、メモリーエラーのPHPが帰ってくるので、間違いはないと思いますが…

>>292
シェルスクリプトでsendmailまで通してしまえばいいんですね、そこは盲点でした。
簡単に組もうと思ってPHPでやってました。

とりあえず、いただいたアドバイスでやってみて、また報告します。
0296nobodyさん2007/07/16(月) 21:53:18ID:???
>>289
HTTP関数だけで別サーバーに転送できるんですか?
別サーバーからfile_get_contentsやfopenでそのデータを開いて、そのサーバーに保存するとかではないですよね?

クライアントからPOSTしてサーバーにデータを送るのと一緒で、
サーバーから別サーバーへPOSTすればいいだけ。
0297nobodyさん2007/07/16(月) 22:14:19ID:???
EasyPHP1.8のMySQLがうまく起動しない件の質問ってここで大丈夫ですか?
0298nobodyさん2007/07/16(月) 22:15:44ID:???
MACアドレスみたいなのって、ifconfigで一時的に変更できなかったっけ?
実際に変更することはかなりの難関だけど
02992832007/07/16(月) 22:17:16ID:cqqgBiea
>>296
fsock関数を使うって事ですね。
だけど、これ受け取り側のPOST_MAX_SIZEとかMEMORY_LIMIT、UPLOAD_MAX_FILESIZEを相当大きくしないといけないですよね…
20MBのGZIPをPOSTするのに、どれくらいの設定にすればいいのだろう……
0300nobodyさん2007/07/16(月) 22:26:19ID:???
1日1回バックアップが必要なほど重要なDBデータを
メールで送ったりPOSTするのかよ。

バックアップを保管しておく側のマシンが
SFTPクライアントで自動で一日一回取りに行けばいい。
クライアントマシンのCRONかタスクスケジューラ使えよ。
0301nobodyさん2007/07/17(火) 00:31:18ID:???
>>298
NICの故障交換ごときでMACアドレスが
コロコロ変わると管理が面倒くさいので
NICのツールで大抵変更できるようになっている。
ベンダーコードの部分まで変更できちゃったりするけど。
ipconfigにはそういった機能はないんではないかね。
ありそうなのはデバイスドライバの設定メニューのところとか。
■ このスレッドは過去ログ倉庫に格納されています