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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん2008/01/10(木) 18:09:19ID:???
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

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

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

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

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

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0910nobodyさん2008/01/26(土) 19:43:54ID:???
>>909 レスありがとうございます。
頭の中には copy unlink とあとdate関数とかの時間系の関数 があるんですが、
「3日後にunlinkを実行」をどこに指定してやればいいのかで困っています。クッキーだと引数にあったんですが、
0911nobodyさん2008/01/26(土) 19:53:25ID:???
getBbsData(笑);
0912nobodyさん2008/01/26(土) 21:05:43ID:???
>>910
自動的に判定処理を実行させたいのか(させたいなら間隔はいくらか)
もしくはユーザがアクセスしたときに判定処理を実行できればいいのか
どちらかによる
0913nobodyさん2008/01/26(土) 21:49:32ID:???
後者でお願いします
0914nobodyさん2008/01/26(土) 21:59:22ID:???
対象のファイルの時間を調べる・・・(1)
現在の時間を調べる・・・(2)
(2)−(1)>=3日間 が真だったらファイル削除
という話ではなくて?
0915nobodyさん2008/01/26(土) 22:16:21ID:???
あ〜なるほど。そういう手があったか。
その場合 その削除プログラムをどこに組み込むか や コピーしたファイルの名前をどこかに保存する
とかいうことも考えないといけなくなる。
0916nobodyさん2008/01/26(土) 22:19:41ID:???
俺はファイル削除の件で書き込みするのはこれが初めてだが、
参考としてファイルを削除するソースを書いておく。

削除対象のファイル名:西暦4桁+月2桁+日2桁+拡張子 (例)20080128.log
今日の日付の取得と削除対象の日の取得は、プログラムをする必要があるが、
簡潔にするため文字列をセットしている。
※このソースは、実行するphpファイルも削除しようとするから注意。

<?php
// 今日の日を取得する。
$date = "20080126";
// 削除対象となる日の設定(これ未満が削除)
$del_date = "20080123";

// ディレクトリのファイルを調べる。
$res_dir = opendir( '.' );
//ディレクトリ内のファイル名を1つずつ取得
while( $file_name = readdir( $res_dir ) ){
$file_date = substr($file_name, 0, 8);
// 対象となる日付より少ないかのチェック。
if($file_date < $del_date){
// ファイルを削除する。
unlink($file_name);
}else{
// 何もしない。
}
}
//ディレクトリ・ハンドルをクローズ
closedir( $res_dir );
?>
0917nobodyさん2008/01/26(土) 22:25:31ID:???
http://jp2.php.net/manual/ja/function.filemtime.php
http://framework.zend.com/manual/ja/zend.date.html
0918nobodyさん2008/01/26(土) 23:19:04ID:???
>削除対象のファイル名:西暦4桁+月2桁+日2桁+拡張子 (例)20080128.log
なんだこの後付け設定ww
0919nobodyさん2008/01/26(土) 23:21:14ID:???
なんか要領が悪そうだ
0920nobodyさん2008/01/26(土) 23:43:30ID:???
ファイルのDLを全部PHP経由でやればどこでやるかなんて悩まなくてもいいのに。。。
pearのHTTP_Downloadがダウンローダーの実装を手助けしてくれる。

>>916
何もしないなら無駄なブロックは無くそうぜ

0921nobodyさん2008/01/27(日) 00:27:25ID:???
そこは突っ込みどころじゃない
0922nobodyさん2008/01/27(日) 00:53:44ID:???
      ___   ━┓  ___    ━┓
     / ―  \  ┏┛/ ―\   ┏┛
    /  (●)  \ヽ ・. /ノ  (●)\  ・
  /   (⌒  (●) /. | (●)   ⌒)\
  /      ̄ヽ__) /   |   (__ノ ̄  |
/´     ___/     \        /
|        \          \     _ノ
|        |          /´     `\
--------------------------------------
このスレはあなたにとって役に立ちましたか?

 ○ 非常に役にたった
 ○ 役にたった
 ○ どちらともいえない
 ○ 役に立たなかった
 ● 全く役にたたなかった
0923nobodyさん2008/01/27(日) 00:58:59ID:IFsQu3P4
凄く他愛ないんですが、以下のif文ってもっとスマートに書けませんか?
if(($name=="yamada")||($name=="tanaka")){〜〜;}
条件部分で、使ってる変数が同じなのを利用してもっとシンプルに書く書き方がないか
知りたいんです  ないんでしょうか?
0924nobodyさん2008/01/27(日) 01:04:47ID:???
既知かもしれないけどswitch文っていうのがあるよ

switch($name){
case "yamada":
処理1();
break;

case "tanaka":
処理2();
break;

default:
処理3();
}
0925nobodyさん2008/01/27(日) 01:09:13ID:???
どー見ても>>923のほうがシンプルだろ
0926nobodyさん2008/01/27(日) 01:09:53ID:???
>>819
>>820
エスケープでできました
スタイルシートも使ってやってみようと思います
以後気をつけます
ありがとうございました!
0927nobodyさん2008/01/27(日) 01:17:10ID:???
>>925
もしかしたらif文の内容が>>923みたいな場合だけじゃないかもしれないし
選択肢の一例として挙げただけだから。
0928nobodyさん2008/01/27(日) 01:20:16ID:???
>>918
笑うことないだろ。
ファイルをコピーして作ってから3日後には削除するという
ことだから、そういう命名規則だとプログラム上で便利だという意味だ。


>>919
「なんか」って何だよ


>>920
無駄なブロックは消しておきます。
0929nobodyさん2008/01/27(日) 01:25:56ID:???
普通は作成日とか更新日を見るもんだろ。
勝手に要件を変更するなよ。
0930nobodyさん2008/01/27(日) 01:27:44ID:???
>>923
文字列の条件候補がもっと多い場合は、あらかじめ配列にいれて
おいてループしながら確認する場合が多い。
何を持ってスマートというかにもよるけれど、この方法だと、
条件確認部分が横に長くならないし、候補の文字列格納部分を
見やすく書くことが出来る。
0931nobodyさん2008/01/27(日) 01:33:23ID:???
>>923
なんで今まで出てこないのか不思議だけども
in_array
0932nobodyさん2008/01/27(日) 01:33:31ID:???
>>929
> 普通は作成日とか更新日を見るもんだろ。
そうなの?あおりとかじゃなくて、どういう状況の時にそれがあるの?
定期バックアップとか取るのなら、ファイル名にしとけば早いと
思ってたけど、ファイル名取得は重いって事?
09339232008/01/27(日) 01:37:13ID:???
答えてくれた人ありがとう
if文て三項演算子みたいな面白い表現もあるので、他にないかなーって思ってたんですが、、
ないっぽいですね
if($name=="yamada"||"tanaka"||"kato"){print "success";}else{print "miss!";}
とかできたらいいのに。923みたいにカッコがどんどん増えてくと見づらくてしょうがない
どうもありがとうございました switchも適宜使いますね>>924
09349232008/01/27(日) 01:42:39ID:???
>>930-931
おお、ありがとう!
in_arrayって知りませんでした、大発見て気分です!
使わせていただきます、ありがとう!
0935nobodyさん2008/01/27(日) 02:27:17ID:9v+HixkY
エロい人じゃなくていいから>>878>>880をおせーて
0936nobodyさん2008/01/27(日) 02:47:34ID:???
ダイジェスト認証自体使ってる人レアだから返答はあまり期待しないほうがいいよ
0937nobodyさん2008/01/27(日) 02:49:47ID:???
>>933
if( preg_match('/^(yamada|tanaka|kato)$/', $name) ){ print "success"; }
else{ print "miss!"; }
みたいにすればできるけど正規表現理解せずにやっても別の問題起きかねないしその方法のが無難かな。

>>880
>| <Directory "/usr/local/apache2/htdocs/member>
手入力なら関係ないかもしれんけどダブルクオート閉じてなくない?
0938nobodyさん2008/01/27(日) 02:50:30ID:???
Basic認証+SSLでセキュア的におk?
0939nobodyさん2008/01/27(日) 02:51:19ID:???
NG
0940nobodyさん2008/01/27(日) 04:54:36ID:???
おしえてください

<!-- test -->
<p>abcd</p>
efgh
ijkl
<!-- /test -->

というのの<!-- test -->と<!-- /test -->の間を抽出したいのですが

preg_match('/<!-- test -->(.*)<!-- test -->/', $buf,$match);

echo $match[0];

でうまくいきません

どうすればいいでしょうか
0941nobodyさん2008/01/27(日) 04:55:39ID:???
↑間違いました
preg_match('/<!-- test -->(.*)<!-- /test -->/', $buf,$match);

です
0942nobodyさん2008/01/27(日) 05:04:57ID:???
>>940
デリミタを変えるか/をエスケープ
0943nobodyさん2008/01/27(日) 05:13:57ID:???
あぁ文字列が改行されてるのか

じゃ

preg_match("/<!-- test -->(.*)<!-- \/test -->/s", $buf, $match);
echo $match[1];

で

$match[0]だとマッチした全体が表示されるので(.*)のとこは[1]ね
0944nobodyさん2008/01/27(日) 05:35:40ID:???
うおおおおおすごい
できました
ありがとうございます
0945初心者です2008/01/27(日) 06:05:29ID:fV3Opxe0
教えてください。

phpでmysqlにレコードを追加したいのですが、
$area = 5;
$sql = "insert into area_tbl (area) values ('.$area.')";
$res = mysql_db_query($db,$sql);
では追加できるのですが、

$area = array(10,10);
では追加できません。
arrayの使い方もよくわからない素人ですが
何卒よろしくお願いします。




0946nobodyさん2008/01/27(日) 06:14:46ID:???
配列を勉強してからこい

次
0947初心者です2008/01/27(日) 06:16:46ID:fV3Opxe0
はい。
0948nobodyさん2008/01/27(日) 08:19:55ID:???
>>935
なぜかは解らんがあれは正規表現で問題があった
多分あれが書かれた時のPHPのバージョンと今のバージョンでは
正規表現の書き方が多少変わったんじゃないかと

正規表現をこれに変更
@(\w+)=([\'"]?)([^\s\2,]+)\2@

$data[$m[1]] = $m[3] ? $m[3] : $m[4];
この部分を
$data[$m[1]] = $m[3];

に変更でいけると思う
0949nobodyさん2008/01/27(日) 09:05:40ID:???
M$の手に堕ちた鈍物が集うスレですか....
君らphpとか使ってて恥ずかしくないの?
0950nobodyさん2008/01/27(日) 12:10:01ID:???
>>949
MSなんか関係あるの?出資や買収でもしたってニュースあったっけ?
IISでPHPに(ある程度)対応するし、提携もしたからその話なのかな。

>君らphpとか使ってて恥ずかしくないの?
んじゃまずYahooとかにその台詞いいなよ。
0951nobodyさん2008/01/27(日) 12:47:09ID:???
じゃあ何を使えば恥ずかしくないの?w
言ってみて
0952nobodyさん2008/01/27(日) 13:02:37ID:???
他の言語を否定する奴って9割方能無しなんだよね、見てきた限りwwwwwwww
>>949さんは、きっと違いますよね^^
0953nobodyさん2008/01/27(日) 13:29:23ID:???
まぁ、ハッカーに好まれる言語ではないけど、寧ろそこがいいところでもある。
array_map
array_filter
array_reduce
aray_walk
create_function
とかを使うと、少し気が紛れる。おれはだけど。
0954”削除”の件を質問したもの2008/01/27(日) 13:37:35ID:???
多くのレスありがとうございます、でもなんか質問したせいで口論が起こっているようで申し訳ないです。
この削除プログラムをどこに利用するかというと 仮登録→本登録 っていうありきたりの流れの中で
仮登録が済んだら本登録画面をmd5で名前を適当に変えてコピってユーザに渡しといて3日後には消す って感じで使いたいんです。
ですからファイル名自体に日付け っていうのはちょっと・・・です
やはりコピったときに コピったファイル名と日付け をデータベースにいれといて そのあとに消す
っていうのが一番オーソドックスな方法ですかね。。。
dbを参照して自動消去するプログラムは1日おきにcronから実行させるって感じで。

このプログラム自体(セキュリティー面やら)みんなに叩かれそうです
0955nobodyさん2008/01/27(日) 13:37:58ID:???
君達のレベルの低さにはうんざりだよ。

ご両親もそうなのかい?
0956nobodyさん2008/01/27(日) 14:02:19ID:???
>>954
なんでファイルを使う必要があるのかそもそも分からん。

要するに、仮登録がすんだら、有効期限3日の間に本登録にしないと
仮登録のデータ消しますよ?ってことだよね。
そのユーザー固有のデータと仮登録日をDBに記録しといて、
「本登録画面」とやらはこのデータを参照するPHPで表示すればいい
気がするんだけど。

物理的にファイルとして存在した方がいいって場合ももちろんある
んだけど、こういうやり方も検討した方がいいかもね。
0957nobodyさん2008/01/27(日) 14:07:58ID:???
私もファイルに保存する必要性がわからない。
ま、掲示板なんかで、サーバの負荷を減らすために
ログファイルからhtmlファイルを作っておいて、
参照は〜.phpではなく、〜.htmlにアクセスさせる
というものがあるけれど、それにあたるものかな?
0958nobodyさん2008/01/27(日) 14:23:04ID:???
if(!($abc == "[a-zA-Z0-9]{3,10}"))
{
echo "<p>3~10文字ですよ</p>";
exit();
}
上で質問したものですが、、、これは正規表現として正しい?
0959”削除”の件を質問したもの2008/01/27(日) 14:31:34ID:???
>>456-457さん ご意見どうもありがとうございます。
確かにそうですね。プログラムを作る初期の段階で「ファイルをつくらなきゃ」っていう固定観念が生まれてたみたいです。

とすると、ファイルを削除する必要がなくなって 本登録時にDBにアクセスして今の日付けと比較すればいいわけですね。
解決?プログラミング作業に戻ってみます。どうもありがとうございます。
0960nobodyさん2008/01/27(日) 14:33:17ID:???
>>958
コードも駄目だし、正規表現も間違ってる
0961nobodyさん2008/01/27(日) 14:41:31ID:???
どこがまちがっているのですか
0962nobodyさん2008/01/27(日) 14:43:04ID:???
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
0963nobodyさん2008/01/27(日) 14:52:14ID:???
テンプレ読まない質問者もそうだが、それに答えてる解答者も同様かそれ以下だな。
0964nobodyさん2008/01/27(日) 15:03:42ID:???
転送用のPHPファイル(header(location:)のみ指示したファイル)に、
オーバーチュアーのコンバージョンカウンタを突っ込むには、
<html><head>(タグ)</head><body></body></html>を加えないとダメ?
それとももっと簡素化出来る方法がありますか?

ど素人につき、意味がわからない質問になっているかもしれません。
0965nobodyさん2008/01/27(日) 15:04:41ID:cIwbO15I
>>964です
id漏れ
0966nobodyさん2008/01/27(日) 15:07:56ID:???
次スレ立てるときにちゃんと削っとけよ・・・質問者IDの件
0967nobodyさん2008/01/27(日) 15:13:30ID:???
↑チョン
0968nobodyさん2008/01/27(日) 15:26:35ID:???
テンプレとうざい自己主張はトレードオフだからな。少々は我慢しろ。
0969nobodyさん2008/01/27(日) 15:27:08ID:???
>>964
意味がわからん
0970nobodyさん2008/01/27(日) 15:31:48ID:cIwbO15I
>>969
説明ページ→転送ページ(PHP)→商品ページ

という状況で、転送に便利なPHPを使っていたんですけど、
そこに効果測定用のオーバーチュアーのコンバージョンカウンタを
埋め込みたいのです。

どうやったら埋め込めますか?という初歩的な質問です。
コンバージョンカウンタはJAVA SCRIPTで出来ています。
0971nobodyさん2008/01/27(日) 15:46:18ID:???
Locationヘッダで飛ばしたら本文は読まないと思う
ブラウザ依存かもしれんけど
0972nobodyさん2008/01/27(日) 15:52:28ID:???
このスレで何回か質問したことあるけど、おれは本当に役に立った。
お陰で自分で考える手間が省けるので、時間の節約にもなって仕事にゆとりが出てきた。
今日は、休日だから日頃のお礼を言うよ。サンクス。
0973nobodyさん2008/01/27(日) 16:10:53ID:jK32tI//
データベースで不思議なエラーが出ました。

$sql = "SELECT 1gyagu FROM pre_appli WHERE id = 1";
$query = mysql_query($sql,$conn) or die("クエリ失敗");
$result = mysql_result($query,0);
print $result;

id =1 の一発ギャグが表示される

アルミ缶の(ry


$sql = "SELECT 1gyagu FROM pre_appli WHERE 1gyagu = "アルミ缶の(ry"";
$query = mysql_query($sql,$conn) or die("クエリ失敗");
$result = mysql_result($query,0);
print $result;

Parse Error

なぜ?
0974nobodyさん2008/01/27(日) 16:16:13ID:???
>$sql = "SELECT 1gyagu FROM pre_appli WHERE 1gyagu = "アルミ缶の(ry"";
最後の " がひとつ多い
0975nobodyさん2008/01/27(日) 16:18:34ID:???
いや、
1gyagu = \"アルミ缶の(ry\"";
だっけか
09769732008/01/27(日) 16:25:16ID:jK32tI//
>>974 "SELECT の"と "アルミ缶 の"を最後に閉じるから2ついる
>>975 うは。うまくいきました。すいません\ってどういう意味でつか???
0977nobodyさん2008/01/27(日) 16:29:36ID:???
続く文字をエスケープ
0978nobodyさん2008/01/27(日) 16:32:42ID:???
>>976
http://jp.php.net/manual/ja/language.types.string.php
というかSQLに於いて文字列リテラルはシングルクォート。
SQLでダブルクォートはテーブルやコラム名の大文字小文字を区別したり、
予約語と被らないようにするための物。
0979nobodyさん2008/01/27(日) 16:36:55ID:???
最近エスケープがらみのトラブル多いな
基礎中の基礎だからちゃんと覚えような
0980nobodyさん2008/01/27(日) 16:44:58ID:???
エスケープ覚える前にデータベースっていうのも学習の順序がおかしいな
すごいんだかすごくないんだか
0981nobodyさん2008/01/27(日) 16:49:37ID:IHMN/Cyj
PHPでアクセスしてきたクライアントの国名(県名)を取得できませんか?
Java Scriptの使用はなし、
あくまでPHP単体での取得方法があればお願いします。
09829732008/01/27(日) 17:19:50ID:jK32tI//
エスケープシークエンス・・・ 一応学習はしてましたが消えかけていました。初めて使いました。ありがとうございました。
0983nobodyさん2008/01/27(日) 17:29:39ID:???
>>981
正確なクライアントの国名はわからないけど、
最後にどこを経由したかはIPからわかる。
0984nobodyさん2008/01/27(日) 17:33:39ID:???
>>982
エスケープシークエンス?
ちょっと勘違いしている予感…
0985nobodyさん2008/01/27(日) 17:44:37ID:cIwbO15I
>>971
有り難うございます。
となると、どうやるんでしょうか(^^;
0986nobodyさん2008/01/27(日) 17:45:55ID:DYynvymq
hello.html
<html>
<body>
こんにちは みなさん
お元気ですか
</body>
</html>

というhtmlファイルがあったとして、
<body>から</body>の間だけ取得するにはどうしたらいいですか?

$file = file_get_contents ("hello.html");
この後どうしたらいいのでしょうか
0987nobodyさん2008/01/27(日) 17:54:39ID:???
>>986
>>940-944これのこと?
0988nobodyさん2008/01/27(日) 17:56:44ID:DYynvymq
preg_matchとやらを使えばいいんですね
ありがとうございました
09899732008/01/27(日) 18:18:31ID:jK32tI//
真スレたてました
http://pc11.2ch.net/test/read.cgi/php/1201425479/
0990nobodyさん2008/01/27(日) 18:20:42ID:???
>>989
通常は過去ログとかテンプレを全部貼り終えてから告知するもんなのだが。
0991nobodyさん2008/01/27(日) 18:22:16ID:IHMN/Cyj
ああ埋まってしまう。
>>983
それでOKです。串さされたらどうしようもないですし。
方法を教えてもらえませんか?
専用の変数があるんでしょうか?
0992nobodyさん2008/01/27(日) 18:22:17ID:???
その前にスレ番が後退しているわけだが
なんで62から61になるんだよ
0993nobodyさん2008/01/27(日) 18:23:03ID:jK32tI//
サーセンw
0994nobodyさん2008/01/27(日) 18:24:51ID:???
これはひどい
0995nobodyさん2008/01/27(日) 18:26:39ID:???
おまえのちんこをぐにぐにふんづけてやる
0996nobodyさん2008/01/27(日) 18:27:49ID:+7hlQOJN
      \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < 野朗共!1000取り合戦、いくぞゴルァ!!       ,,、,、,,,
    /三√ ゚Д゚) /   \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,         \オーーーーーーーッ!!/
      //三/|三|\     ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ∪  ∪       (    )    (     )   (    )    )
 ,,、,、,,,       ,,、,、,,,  ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ,,、,、,,,       (    )    (    )    (    )    (    )
0997nobodyさん2008/01/27(日) 18:28:28ID:IHMN/Cyj
マニアワナイwwwオワタwww
0998nobodyさん2008/01/27(日) 18:29:46ID:???
多分1000は俺だろう
0999nobodyさん2008/01/27(日) 18:29:57ID:jK32tI//
申し訳ないす ぐにぐにしてくださいw
1000nobodyさん2008/01/27(日) 18:30:02ID:Nkn4j03s
1000Get!!
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。