【PHP】下らねぇ質問はID出して書き込みやがれ 84
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/04/27(月) 21:39:11ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 83
http://pc11.2ch.net/test/read.cgi/php/1238958898/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0592軟式PHP
2009/05/26(火) 13:09:39ID:???プログラム関連板全体に言えるが。
>>591
マテ。あわてるな。
トリガーでdeleteされたら別テーブルにコピーしてるに違いない。
0593nobodyさん
2009/05/26(火) 16:41:29ID:UQeZnrko無料レンタルサーバーでPHPを動かした場合、メモリはおよそ幾らくらい使用可能でしょうか?
多すぎると、エラーで停止しますか? もしくはHDDに移されて動作が遅くなりますか?
0594nobodyさん
2009/05/26(火) 16:43:25ID:e9nrbvXe0595nobodyさん
2009/05/26(火) 16:51:53ID:UQeZnrko0596nobodyさん
2009/05/26(火) 16:56:15ID:UQeZnrko実行開始までにかかる部分で負荷が大きいようでした。
0597軟式PHP
2009/05/26(火) 17:09:04ID:???使用可能なメモリはphpinfoしてmemory_limitを見るべし。
オーバーするとエラーで停止する。
>>595
fastCGIだったらオーバーヘッドも少なく、C/C++の方が速いと思う。
思うだけでやったことはない。
0598nobodyさん
2009/05/26(火) 17:10:36ID:UQeZnrko0599sage
2009/05/26(火) 18:12:49ID:???【PHPのバージョン】php5.2
【連携ソフトウェア】qmail(sendmailコマンドは使用可能)
【質問内容】受信したメールに添付されている画像等を
特定のフォルダへ投げるようにするにはどうすればいいでしょうか。
.qmailに転送用のものを置けばいいとは思うのですが、どのようなものを置けばいいのか
サンプルなどあれば教えてください。
0600nobodyさん
2009/05/26(火) 18:31:35ID:UQeZnrkoatpageとtok2で調べたのですが、atpageはアクセス拒否でtok2は8Mでした。
0602nobodyさん
2009/05/26(火) 20:56:23ID:UQeZnrkoPHPを高速化させる部品があるみたいですがこれは導入出来ないと思いました。
0603nobodyさん
2009/05/26(火) 21:03:05ID:???ただでさえ他ユーザーとリソースの食い合いするんだから。
0604nobodyさん
2009/05/26(火) 21:28:08ID:???|/usr/bin/php -q /example/example.php >& /dev/null
./Maildir/
とかやって example.php でなんとかする
0605nobodyさん
2009/05/27(水) 00:14:56ID:???そういう時は、「完成品」を見るのは微妙。
自分のコードを、どうやれば「完成品」に近づけられるのかが分からないからな。
「完成品」のどこがどういいのかも、実際に書き換えたりメンテしたりしないと分からない事が多い。
指導するにしても、おまいの現時点でのレベルが分からんから他人にはどうしようもないしな。
上手い人に自分のコードを渡して、考えている事を聞かせてもらいながら目の前で「美しく」書き換えてもらうのが一番分かりやすい。
…んだが、まあ難しい事が多いしなぁ。
0606nobodyさん
2009/05/27(水) 00:31:02ID:Cc/G0jS50607nobodyさん
2009/05/27(水) 00:35:06ID:???0608605
2009/05/27(水) 00:55:02ID:???できりゃ構わないけどな
MVC構造のフレームワーク使ってるのに何故かテンプレートにロジックが書いてある、とか、そういう事になるのがオチだと思う
使いまわす価値のあるコード作法ってだいたいデザインパターンという形で既に体系化されてるから、ある程度のレベル以上の奴はそっちを座学した方が早いしな
0609nobodyさん
2009/05/27(水) 01:07:23ID:???きれいなコードを書くために心がけること
・関数名は分かりやすい名前を付ける。イミフな省略はしない。多少長くなってもキニシナイ。
・同様に変数名も分かりやすい名前を付ける。
・空行を多く入れてみる。
藤原博文さんの本だったかな?
フォントを小さく(5ptとか)して見て、コードが黒々してたら、たいてい読みづらい、って書かれてた気がする。
・一つの関数内のコードをダラダラと書かない。意味の単位で小分けする。
理想は、コメントや空行を含めても、スクロールせずに一つの関数のコードがみえること。最悪100行以内に押さえる。
・同じ処理の塊をいろんな箇所に書かない。極力、関数としてまとめる。
まとめすぎて、かえって分かりづらくなるかもしれないが、最初は気にせずガンガンまとめてしまう。そのうち常識の範囲内がどの程度かわかるようになる...はず
・フラグの多様は控える。気がつきゃ万国博覧会になっちゃうよ。
・トリッキーなことはしない。
有名どころでは、ループ抜けるのに例外使うとか
いずれは、そんなトッリキーな手段に頼らざるを得ないといけないかもしれないが、始めは完全禁止の気持ちで。
関数分けしていくと、呼び出しが深くなって遅くなるとか言われるかもしれないけど、そんなところがボトルネックになるのはまずないから、キニシナイ。
0610nobodyさん
2009/05/27(水) 01:25:42ID:vJelIhGL単に見かけを綺麗にしたいならcode beautifierの類を使えば早い。
ttp://codeassembly.com/examples/beautifier.php
0612nobodyさん
2009/05/27(水) 02:08:35ID:Cc/G0jS5丁寧な回答ありがとうございました
0613nobodyさん
2009/05/27(水) 02:12:26ID:???英語も勉強するべきなんでしょうか
0614nobodyさん
2009/05/27(水) 02:41:03ID:???・変数への再代入の禁止
原則、ある変数には一度しか値を代入しない。次に代入する時はケチケチ使い回さず新しい変数を用意する
配列の合計を求める時など、何かをまとめる時だけは例外だけど
・多重ネストの回避
ifのネストが深くなったら、if内の処理をごっそりそのまま関数に切り出す事をまず考える
foreach、switchなども含め、どんな複雑な処理であっても、関数内のネストを一重だけにする事も可能
特にswitchは、その部分を単独の関数として切り出すことを真っ先に考えるべき
・グローバル変数の禁止
まずは、使う変数は全て関数の引数にする
すると、同じ引数を取る関数群がいくつか見えてくる。これが、どこをクラス化するかを判断する一番安全な方法
・手続き的にではなく、宣言的に書く
「Aに処理Xを加えて変数Bに、それに処理Yをして変数Cに」という思考を捨てる
「CはBにYをしたもの」「BはAにXをしたもの」という順序で、つまり定義を記述する感じでプログラムを書く
一時変数を同名の関数に置き換えていく感じで、一時変数を削っていくのが分かりやすい手順
>613
ローマ字より英単語のほうが読みやすいだろjk
まあ、そういうレベルじゃなく、$variableでも命名としては最低の部類に入るけどな
0615nobodyさん
2009/05/27(水) 02:41:42ID:???0616nobodyさん
2009/05/27(水) 03:39:43ID:vJelIhGL・ハンガリアン記法っぽいの
$intUserId, $strBody
・アンダーバーで繋ぐ
$user_id, $regex_str
・どうでもいいカウンタ変数
$i, $j, $k
・その他
foreachをネストして多次元配列を展開する場合に使う最初の一時変数は
何かこうもっと良い命名がある気がするけど思いつかないからv_を接頭辞にした。
foreach ($array as $v_array) {
foreach ($v_array as $key => $value) {
}
}
0617nobodyさん
2009/05/27(水) 04:08:53ID:???絶対悪態付きたくなるから、何が問題か分かる。
0618nobodyさん
2009/05/27(水) 05:43:01ID:???・手続き的にではなく、宣言的に書く
「Aに処理Xを加えて変数Bに、それに処理Yをして変数Cに」という思考を捨てる
「CはBにYをしたもの」「BはAにXをしたもの」という順序で、つまり定義を記述する感じでプログラムを書く
一時変数を同名の関数に置き換えていく感じで、一時変数を削っていくのが分かりやすい手順
$B=X($A);
$C=Y($B);
は分かるが、「CはBにYをしたもの」「BはAにXをしたもの」ってどういう事?
0619nobodyさん
2009/05/27(水) 08:55:18ID:???型にハマったんじゃ新しいもの生み出せない ゾと
0620nobodyさん
2009/05/27(水) 09:45:02ID:???foreach($years as $eachYear){
foreach($month as $eachMonth)
}
0621nobodyさん
2009/05/27(水) 09:47:36ID:???0622nobodyさん
2009/05/27(水) 21:58:18ID:tZbxcqT7A.csv
ID 名前
00001 あああああ
00002 いいいいい
00003 うううううう
B.csv
00004 えええええ
00005 おおおおお
00006 かかかかか
csvファイルAからBへ特定の行だけを移動したいと思ってます。
チェックボックスで選ばれたIDの行をAから削除しBへ書き込むプログラムはどうすりゃいいんでしょうか?
IDは重複する事はありません。
0623nobodyさん
2009/05/27(水) 22:15:30ID:???phase2.postされたチェックボックスのID値を見てA.csvを読み込み該当の行を特定、B.csvを追記モードでopenして追記。A.csvから該当行を削除。
こんなもんか
0625nobodyさん
2009/05/28(木) 02:36:09ID:PcD3hYBe【サーバー】Apache (Unix) PHP/5.2.8 mod_ssl/2.8.28 OpenSSL/0.9.7j
【PHPのバージョン】php5.2.8
【連携ソフトウェア】mysql
【質問内容】
通常のサイトから、SSLのサイトへ向けてPOST送信でデータを渡す際、
hidden だと値が渡らないという現象に見舞われてるのですが、
どうすれば解決するでしょうか。
サンプルソースです
(改行が多すぎるってエラーが出たので、次に続きます)
0626625
2009/05/28(木) 02:37:02ID:PcD3hYBeサンプルソースです
「送信元」(test.html)
<html>
<body>
<form action='https://xxxxxxxx.net/test.php' method='post'>
<input type='text' name='test' value='12345'>
<input type='hidden' name='kakushi' value'abcd'>
<input type='submit' name='submit' value='送信'>
</form>
</body>
</html>
「送信先」(test.php)
<?php
print_r ( $_REQUEST ) . "<br />";
print_r ( $_POST );
?>
「結果」
Array ( [test] => 12345 [kakushi] => )
Array ( [test] => 12345 [kakushi] => )
「期待すること」
Array ( [test] => 12345 [kakushi] => abcd )
Array ( [test] => 12345 [kakushi] => abcd )
よろしくお願いします m(__)m
0627625
2009/05/28(木) 02:53:41ID:PcD3hYBe先ほど、「通常のサイトから、SSLのサイトへ向けて」って書きましたけど、
同じSSLのサイト内でも同様にhiddenの値が渡りませんでした。
これはひょっとしたらスレ違いなのでしょうか。
0628nobodyさん
2009/05/28(木) 03:03:25ID:???↓
value='abcd'>
0629nobodyさん
2009/05/28(木) 03:13:26ID:???0630625
2009/05/28(木) 04:34:02ID:PcD3hYBe世の中、解決できない問題はないんだな
>>628 dクス
0631nobodyさん
2009/05/28(木) 08:39:32ID:???0632nobodyさん
2009/05/28(木) 14:50:53ID:rnletbDkお勧めがあったら情報共有しましょう。
ちなみに私は日経ソフトウェアとDB Magazineくらいです。
0633nobodyさん
2009/05/28(木) 14:53:59ID:???0634nobodyさん
2009/05/28(木) 14:58:50ID:???0635nobodyさん
2009/05/28(木) 18:37:52ID:a/iG0y0pどうしたらいいですか?
zendFWでアプリケーション領域に蓄積されてる画像を、zendFWとは別に単独で
動いてるphpの中で動かしたいんですが…
0636nobodyさん
2009/05/28(木) 19:22:36ID:???0639nobodyさん
2009/05/28(木) 20:06:58ID:cUediPPlcase "";
print("BOX1が未入力<br>");
break;
case(strlen($textbox1) < $minlen);
print("規定の文字数以下<br>");
break;
case(ereg("^/", $textbox1)==true);
print("先頭に/を含んではいけません<br>");
break;
}
switch ($textbox2){
print("BOX1が未入力<br>");
break;
〜以下同じような事がずらずら
}
//ここまでにbreakがあったらここで処理を停止したい
XXX
//ここ以降に別の処理とかSQLに書き込み等
YYY
XXXの所までにbreakに掛からなければexit等を使い、進ませないように書くにはどんな
書き方がありますか?
if (breakがあったら){
exit;
}
のような事はできないんでしょうか?
0640nobodyさん
2009/05/28(木) 20:18:24ID:???0641nobodyさん
2009/05/28(木) 20:20:17ID:???0642nobodyさん
2009/05/28(木) 20:30:56ID:a/iG0y0pおおー
それが正解っぽいですね! どうもありがとう
他の方もありがとう
0643nobodyさん
2009/05/28(木) 20:41:12ID:pePXJ68I本とwebで十分。
0644nobodyさん
2009/05/28(木) 21:25:31ID:cUediPPlありがとうございました。「フラグを立てる」の意味が解らなかったのでぐぐったけど
意外と少なかった気がしますが試行錯誤の末、解決できました。まず
$flag = 0;を宣言、caseのケツに$flag = 1;を書いておいてXXXの部分に
if($break){
exit();}
を書いたらうまく行きました。この場合の「フラグを立てる」というのは
こうした事をさすのでしょうか?
重ね重ねくだ質ですがお願いします。
0645nobodyさん
2009/05/28(木) 21:26:46ID:cUediPPl訂正・・if($break){ではなくてif($flag){ でした。
0646nobodyさん
2009/05/28(木) 21:27:07ID:???0647nobodyさん
2009/05/28(木) 21:27:54ID:???0648nobodyさん
2009/05/28(木) 21:31:52ID:???>555
0649馬鹿ですみません><!
2009/05/28(木) 22:35:16ID:ib08ur5Fif ( in_array('_GET', $request_keys) ||
in_array('_POST', $request_keys) ||
in_array('_COOKIE', $request_keys) ||
in_array('_FILES', $request_keys) ||
in_array('_SERVER', $request_keys) ||
よく見るソースコードで書いてあるんだけど
これって誰得なんですかぁ?
0650nobodyさん
2009/05/28(木) 22:37:20ID:???0651馬鹿ですみません><!
2009/05/28(木) 22:39:15ID:ib08ur5Fです。
0654nobodyさん
2009/05/28(木) 22:43:33ID:???0655馬鹿ですみません><!
2009/05/28(木) 22:43:52ID:ib08ur5F0656馬鹿ですみません><!
2009/05/28(木) 22:49:01ID:ib08ur5F俺分からないぁ〜馬鹿だから・・・
PHPer
0657nobodyさん
2009/05/28(木) 22:49:07ID:???ttp://php.benscom.com/manual/ja/language.variables.superglobals.php
0658nobodyさん
2009/05/28(木) 22:53:56ID:???何がしたいのかわけわからんw
0660馬鹿ですみません><!
2009/05/28(木) 22:55:42ID:ib08ur5F// Disallow requests that contain some _XYZ global variables
//
$request_keys = array_keys($_REQUEST);
if ( in_array('_GET', $request_keys) ||
in_array('_POST', $request_keys) || in_array('_COOKIE', $request_keys) ||
in_array('_FILES', $request_keys) || in_array('_SERVER', $request_keys) ||
in_array('_ENV', $request_keys) || in_array('_REQUEST', $request_keys) )
die('Disallowed request variable found. Exited.');
//
// Unset global variables
//
if ( ini_get('register_globals') ) {
foreach ( $_REQUEST as $var_name => $null )
unset($$var_name);
unset($null);
}
0661馬鹿ですみません><!
2009/05/28(木) 22:58:19ID:ib08ur5F誰得なの? まじで。。。
0662nobodyさん
2009/05/28(木) 22:58:31ID:???けどそれって、んな大層に書くようなことかなあ。
窓硝子は防犯上危険だといって、でかい南京錠をかけてるようだ。
まず先に窓硝子を止めればいいのに。
0663nobodyさん
2009/05/28(木) 23:00:20ID:???0664nobodyさん
2009/05/28(木) 23:19:07ID:???$_REQUEST 経由で入ってきた変数を
サニタイズする、ってところかな。
0665馬鹿ですみません><!
2009/05/28(木) 23:29:14ID:ib08ur5Fforeach ( $_REQUEST as $var_name => $null )
unset($$var_name);
unset($null);
}
ここは馬鹿でもわかったwwwwwwwwwww
0666nobodyさん
2009/05/28(木) 23:38:45ID:???流れ的にはそのような処理かと思います
色々やってみたのですがなかなかうまくいきません
どなたか例文でもいただけないでしょうか?
0667nobodyさん
2009/05/28(木) 23:39:41ID:???0668nobodyさん
2009/05/28(木) 23:41:59ID:???話はそれからだ
0670nobodyさん
2009/05/28(木) 23:54:08ID:???phase1.A.csvを読み込んで
(普通に表示)
行単位にIDに紐付けたチェックボックスをつけつつ表示
phase2.postされたチェックボックスのID値を見て
A.csvを読み込み
該当の行を特定
B.csvを追記モードでopenして
追記。
A.csvから該当行を削除。
どこが分からないんだ?
0671nobodyさん
2009/05/29(金) 00:27:40ID:???0672nobodyさん
2009/05/29(金) 14:30:15ID:???<?php $f=fopen("A.csv","r+") or die("x.");$fb = fopen("B.csv","a") or (fclose($f) and die("x."));echo '<form action="?" method="post">';
$al = array(join(",",fgetcsv($f)));while (($d = fgetcsv($f))){if( $_POST["sb"] == "ex" && in_array($d[0],$_POST["c"])){fputcsv($fb,$d);}else{echo '<input type="checkbox" name="c[]" value="'.$d[0].'">'.$d[1].'<br>';$al[] = join(',',$d);}
}echo '<input type="submit" name="sb" value="ex"></form>';rewind($f);fputs($f,join("\n",$al));ftruncate($f,strlen(join("\n",$al)));fclose($f);fclose($fb); ?>
これで我慢しとけ。
0673nobodyさん
2009/05/29(金) 22:49:20ID:sUbabdXeUMLとかを使うことが多いんでしょうか?
0674nobodyさん
2009/05/29(金) 22:56:15ID:???0675nobodyさん
2009/05/29(金) 22:56:29ID:???とかかな…
0676nobodyさん
2009/05/29(金) 22:59:20ID:???簡単でしょ?」
とかもあるな。
0677nobodyさん
2009/05/30(土) 08:08:45ID:???渡されるのは要件の箇条書きとかイメージシートで、なぜか仕様書は作ったやつが書くことが多い世にも不思議な物語。
0678nobodyさん
2009/05/30(土) 08:28:54ID:???0679nobodyさん
2009/05/30(土) 09:16:41ID:???どちらかというと仕様を忘れないための仕様書になる。
家建てた後に設計書を作るイメージだなwwww
0680nobodyさん
2009/06/01(月) 09:21:13ID:Q4RGmDnB転送されてきたメールはどこに格納されるんでしょうか?
サーバーがqmailだったので.qmailでphpに飛ばす事は出来るようになったんですが
飛ばされた時にどこに格納されているのかわからないので、どうやって取り出して分割すればよいのかがわかりません。
そういったことをやってるサンプルとかあれば教えてもらえないでしょうか。
0681nobodyさん
2009/06/01(月) 09:53:45ID:???どこに格納とかじゃなくて、qmailからphpに飛ばせてると言うことは、
標準入力(stdin)から受け取れば良い。
file_get_contents("php://stdin");で受け取り
Mail_mimeDecodeとかで本文・添付を分ければ良いと思う。
0682681
2009/06/01(月) 09:58:26ID:Q4RGmDnBサンクス。
php://stdin ってのを知らなかった。
ちょっとやってみます。
0683nobodyさん
2009/06/01(月) 10:45:30ID:J3ZG9zzj$_COOKIE['cookie'] = true;
if($_COOKIE['cookie'] !== true) {
die("Cookieは無効です。");
}
これでCookieが無効かどうか判別しようとしたのですが、CookieをOFFにしてもtrueになります
0684nobodyさん
2009/06/01(月) 10:58:47ID:4hjBfWfCPHP5、Windows XP Proにて、コマンドラインアプリを作ってます。
動的にフォルダ名を指定して、エクスプローラー(またはその他のファイラー)で開こうとしています。
コンソール画面上・プログラム上ではなく、エクスプローラーに、特定フォルダを開かせるにはどうすればよいでしょうか?
0685nobodyさん
2009/06/01(月) 11:02:33ID:???if(isset($_COOKIE['hoge']))
みたいに確認する
0686nobodyさん
2009/06/01(月) 11:17:45ID:???phpからエクスプローラをどう呼んでるのか知らんが
explorer.exe <フォルダのpath>
じゃダメなん?
0687nobodyさん
2009/06/01(月) 12:14:45ID:???system('explorer C:\');
これでいけました!
systemとかコマンドラインオプション渡せばいいことはわかっていたのですが、
どうも自分の使っていたファイラーだとコマンドラインオプションが違うようで、
つまらないところではまってしまってました・・・。
ありがとうございました。
0688nobodyさん
2009/06/01(月) 12:39:59ID:Sqhg3GlCみたいな文字列があったとき、>>数字のペアだけを抜き出して配列に格納できるような関数はありますでしょうか?
explodeみたいなやつで、かつ正規表現でマッチできるような感じです。
preg_matchである程度対応できたのですが、
$mojiは可変で、>>数字があったりなかったり、これよりも増えたりして、
さらに>>数字を抜き出す数もこちらで指定したときにpreg_matchでは難しかったので、
とりあえず>>数字ペアだけでも全て抜きだせればいいなぁと思いました。
抜き出す方法、または便利な関数があれば教えてくださいよろしくお願いします。
0689nobodyさん
2009/06/01(月) 12:40:54ID:J3ZG9zzjpreg_matchで余裕
お前の書き方が悪いだけ
0690nobodyさん
2009/06/01(月) 13:01:18ID:Sqhg3GlCpreg_match_allで思い通りの挙動になりました。
0691nobodyさん
2009/06/01(月) 13:43:18ID:FEmWlQvb$moji = "あいうえお>>21かきくけこ>>12さしすせそ>>112たちつ>>1てと";
$pattern = "/[^0-9>]/";
$result = preg_replace($pattern, "", $moji);
$result = explode('>>', $result);
print_r($result);
初心者だけどこれぐらいしか思いつかねえwww
■ このスレッドは過去ログ倉庫に格納されています