【PHP】下らねぇ質問はここに書き込みやがれpart14
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/12/18(日) 10:10:12ID:???ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
次スレは>>970あたりが建てて下さい
過去スレは>>2
0404nobodyさん
2005/12/28(水) 19:39:53ID:???ちょっとくらい外れてたっていいじゃない。
0405nobodyさん
2005/12/28(水) 19:40:33ID:???0406nobodyさん
2005/12/28(水) 19:42:55ID:???<!--
function winopen(w,h){
win1=window.open("<?php echo $x;?>.html","","width="<?php echo $w;?>","height="<?php echo $h;?>");
}
//-->
</SCRIPT>
ってことじゃないの?
0408nobodyさん
2005/12/28(水) 20:05:27ID:HUgW2hhm連続送信対策をしたいのですが
方法として、
送信者のIPを記録するログファイルを用意し
送信しようとするたびに、ログファイルから送信者のIPを
探し、ログファイルに存在しない、
もしくは存在してもタイムスタンプが規定の時間を経過している場合
送信を完了させる。
というものを考えています。
そこで、ログファイルからのIP検出の際
fgets()でシーケンスに調べていく他に、
一気に調べたりする方法
(1行ずつ見ず指定文字列がファイル内にあるか見るような関数)
はありますか?
あるなら、よろしければ関数名だけでも教えてください
0410nobodyさん
2005/12/28(水) 20:42:21ID:???<STYLE type="text/css">
<!--
body {
background-color: black;
font-size : 14px;
line-height : 27px;
word-spacing : 3px;
letter-spacing : 3px;
font-family : Verdana,sans-serif;
overflow-x:hidden;
}
-->
</STYLE>
とした所、リンクの下線は消えず・・・。
もしかして、PHP側にスタイルの制限あったりでしょうか?
0411nobodyさん
2005/12/28(水) 20:46:46ID:???$s = 'xx<0>x<3><2>x';
$a = array('A', 'B', 'C', 'D');
これを、<0> を $a[0] で置き換える、<1> を $a[1] で置き換える、.... ということをしたいです。
今はこうしています。
for ($i = 0; $i < count($a); $i++) {
$pat = '/<' . $i . '>/';
$s = preg_replace($pat, $m[i], $s);
}
しかし、これだと配列の長さが長くなるほどループの回数が増えます。
できれば、preg_replace()を1回だけ呼び出すだけにしたいのですが、できますでしょうか。
preg_replace_callback() を使えばできるのかと思いましたが、コールバック関数に $a を渡すことができないため、できなさそうです。
どなたか教えてください。
0412nobodyさん
2005/12/28(水) 20:46:54ID:???CSSスレ行きなされ。
0413nobodyさん
2005/12/28(水) 20:47:34ID:???ファイル保存も考えたのですが、そのファイルをURL自打ちされて外部からアクセスされたくないので
特定のディレクトリに置いてしまうのは気がひけたのです。ファイルを作成してURL外において要求
された時だけPHP経由で公開すると言うのが良いのでしょうか?。
>>408
私は邪道だからIP毎にファイル作成してます(^^;。
0414nobodyさん
2005/12/28(水) 20:48:56ID:???<style type="text/css" media="all">
<!--
a {
text-decoration: none;
}
-->
</style>
0415nobodyさん
2005/12/28(水) 20:49:36ID:???PHP以前の問題でしょ。
文体からして>>401と同じ人だと思うけど、
もうちょっとcssスレやjsスレで勉強してからきたほうがいいと思う。
これだけじゃかわいそうなので、
下線を消すためのcssは、border-style:none;など。
0418415
2005/12/28(水) 20:56:23ID:???border-style:none;ってのはきにしないでください。
0419nobodyさん
2005/12/28(水) 21:00:06ID:???申し訳ないです。
サイトで勉強してきますorz
答えて下さった方ありがとうございました。
0420nobodyさん
2005/12/28(水) 21:00:07ID:???良スレの悪寒……w
0421nobodyさん
2005/12/28(水) 21:32:32ID:???0423nobodyさん
2005/12/28(水) 21:55:23ID:???0425nobodyさん
2005/12/28(水) 22:04:55ID:???0426408
2005/12/28(水) 22:26:08ID:HUgW2hhmfile_get_contentsを調べてみました
確かに便利ですね
どうもありがとうございます
>>413さん
それも、便利そうですね
だけど、アクセス数が高くなってくると
ログファイルでパンパンになりませんかね^^;
利用人数に応じてそれも検討してみます
ありがとうございます
>>422さん
file()で配列扱いになるんですね
知りませんでした^^;
よろしければ、どういう形式で配列に入るか教えていただけませんか?
***.***.***.****(IP) , 2005/12/28/23:00(改行)
***.***.***.****(IP) , 2005/12/28/23:25(改行)
という形式とさせてください
0427408
2005/12/28(水) 22:26:50ID:HUgW2hhm0428nobodyさん
2005/12/28(水) 22:32:01ID:???1行の内容がそのまま配列1要素(改行付き)
なので、in_array()じゃ探せないな。
preg_grep('/^'.preg_quote($IP).',/', file("ファイル名"))
ってとこでどーよ?
0429nobodyさん
2005/12/28(水) 23:07:39ID:???0432408
2005/12/29(木) 00:50:22ID:ziv/ZkA5勉強不足で、教えてもらった関数が使いこなせないので
とりあえず、勉強しなおしてからまた明日にでも質問させていただきます
どうもありがとうございました。
IP
時刻
IP
時刻
・
・
・
みたいな書き出しかつ、シーケンス方式でIPを検出させれば楽なんですが
あまりにも、芸がないもので・・・
ちなみに、
アクセスするたびにDB(mysql)にログを残していって
DBから調べて・・・エラーか否かっていうのは
アクセス量にも寄ると思いますが、どんなもんでしょう?(鯖負荷など)
それではまた明日・・・ありがとうございました
0433nobodyさん
2005/12/29(木) 01:04:49ID:???大量のアクセスがあるならファイルに保存するよかDBがいいだろ。
その辺はアクセス数次第だから両方実装してみてベンチでも取って
想定されるアクセス量のときに速い方を選べ。一般的正解など無い。
0434nobodyさん
2005/12/29(木) 04:10:14ID:1WTCJJ6c引数が ?test=hoge の場合 文字例 AAAを出力し、員数が無い
場合何も表示しないようにしたいのですが:
$mode = $_GET['test'];
if ($mode = 'hoge'){print("AAA");}
とまではやってみたのですが、員数が無い場合
何も表示しない方法が分からなくて行き詰まってしまいました。
こんな私ですがよろしくお願いします。
0435nobodyさん
2005/12/29(木) 04:26:08ID:???if(count($_GET) == 0) { exit; }
とか
if($_SERVER["QUERY_STRING"] == "") { exit; }
とか。
POSTデータもチェック要るのか?これ。
0436434
2005/12/29(木) 04:56:52ID:1WTCJJ6cありがとうございます、員数は誤字でした。
>POSTデータもチェック要るのか?これ。
よく考えてみたら必要ありませんでした。
<?php
if($_GET['test'] == 'hoge'){echo "<p>マンセー</p>";}
if(count($_GET) == 0){exit;}
?>
としてみましたが、何故か「<p>マンセー</p>」がprintされません。(当然ですが「.php?test=hoge」としました)
echoの使い方は間違ってないと思うのですが…
エラーも出力されません。
0437nobodyさん
2005/12/29(木) 05:08:54ID:???2chのIDからホスト名生成してください
0438nobodyさん
2005/12/29(木) 05:10:56ID:???<?php
var_dump($_GET);
if($_GET['test'] == 'hoge'){echo "<p>マンセー</p>";}
if(count($_GET) == 0){exit;}
?>
とするとどんな内容が表示される?
0440434
2005/12/29(木) 05:19:55ID:1WTCJJ6cあ、何かの手違いでした。
ちゃんと 「まんせー」と表示されていました。すみません。
>するとどんな内容が表示される?
ちなみにやってみるテスト…
array(1) {
["test"]=>
string(4) "hoge"
}
でした。ありがとうございました。
0441434
2005/12/29(木) 06:00:20ID:1WTCJJ6c後ろの処理が全部駄目になってしまいます。
そこで、[test]キーの値が[hoge]の場合のみ
「<p>まんせー</p>」をプリントして、それ以外または引数が指定されてない場合は
何もプリントしないでそのまま…なんてことは出来るのでしょうか?
0443nobodyさん
2005/12/29(木) 07:41:42ID:N/LCxJEVマニュアルを探す気力がありません。
"あいうえお。かきくけこ★さしすせそ"
この文字列から「。★」以外を配列に入れるには
どう書いたらいいですか?
文字コードはUTF8です
$matches[0] に "あいうえお"
$matches[1] に "かきくけこ"
$matches[2] に "さしすせそ"
っていう配列を得たいです
0444nobodyさん
2005/12/29(木) 08:30:41ID:???まず精神科か心理カウンセラーの診察を受けて然るべき治療を施した上でマニュアルが読めるようになるまでは来なくていいよ。
マニュアル読めればその程度の問題は非常に簡単。mb_splitで一撃。
0446443
2005/12/29(木) 09:13:34ID:N/LCxJEVマニュアル読めたyo!
寝たら読めた。みんなありがとう
0448nobodyさん
2005/12/29(木) 09:49:51ID:???0449nobodyさん
2005/12/29(木) 10:00:09ID:???0450nobodyさん
2005/12/29(木) 10:11:04ID:???0451nobodyさん
2005/12/29(木) 10:19:38ID:???$a = 0;
if ($a) { echo "あ"; }
if (!$a) { echo "い"; }
if ($a == "") { echo "う"; }
if ($a != "") { echo "え"; }
if ($a == 0) { echo "お"; }
の結果が
いうお
になります。
$aに0〜の数字が入っていれば真としたいのですが、条件をどのようにすればよいのでしょうか?
0452nobodyさん
2005/12/29(木) 10:27:43ID:???0453nobodyさん
2005/12/29(木) 10:31:53ID:???!==
0454nobodyさん
2005/12/29(木) 10:33:15ID:???少し考えればできそうなのに頭がこんがらがるお前は頭いいね。
つーか
> $aに0〜の数字が入っていれば
って意味ワカンネ。
0455nobodyさん
2005/12/29(木) 11:15:25ID:???0457nobodyさん
2005/12/29(木) 11:27:09ID:???$aが数字の場合、真
$aが空や数字以外なら偽
としたかったのです。
>>455
でできました。ありがとうございました。
0459434
2005/12/29(木) 15:45:06ID:1WTCJJ6cクエリが test=hoge 以外だとエラー吐いたのですが
ちょっと強引に error_reporting(0); で誤魔化しました。
>>447
「ひきすう」だったのね…orz
おかげで解決しました。
本当にありがとうございました。
0460nobodyさん
2005/12/29(木) 16:45:34ID:???じゃあ
if (isset($_GET['test'] ) and $_GET['test'] == 'hoge') {
echo "<p>まんせー</p>";
}
0461nobodyさん
2005/12/29(木) 20:50:49ID:???たしかにサンプルなんかだと
むやみにexitとかdie使っててどうすりゃいいんだ!とか悩んだな。昔は。
ちゃんとhtmlのケツの方まで出したかったりするんだったらエラー処理時の関数を作っておくとよい。
そういう事をしてるうちに見通しのよいソースが書けるようになってくるし、自分の関数をほかのプログラムでも使い回ししやすくなる
0462nobodyさん
2005/12/29(木) 21:07:10ID:???ファイル処理時にファイルの内容なんかをmysqlにもデータ保持させて、
読み込む必要がある場合は、
mysqlから読み込んだりしてます。
この方法ってやっぱりナンセンスでしょうか?
今まで簡単だからとmysqlに逃げてましたがそろそろ真剣に
考えなきゃいけないかなと感じてます。
理由はデータベースからひっぱってくるデータは非常に処理が
しやすいからです。
でも整合性(ファイルとデータベースの違い)とかで
たまに苦しみます。整合性自体も考慮して書けばいいんでしょうが。
0463nobodyさん
2005/12/29(木) 21:52:07ID:???「整合性」って具体的に何の話をしてるんだかよくわからんけど、
DBで処理できる範囲ならそのままでいいんじゃない?
負荷が大きくなってくると少し考えなくちゃいけないけど。
0464nobodyさん
2005/12/29(木) 23:11:37ID:???どっちにしろエラー処理でプログラム終了しちゃったらそこで終わっちゃうし、
かといって終了させないと、実行させたくない正常時処理まで走ってしまう。
結局のとこ、全体の流れをちゃんと組めてないだけだろ?
その程度のごくごく基本的なロジックも組めないならプログラミングなんてやめてしまえと。
関数化しないといけないのはエラー時の表示はもちろん、メインの処理も含めて全体。
元の質問者は「他にどんな処理があるかは教えませんが、表示だけしないで終わるように、
かつ自分で考えなくてもそのまんま動くプログラムを教えてください」とアホ質問してるだけなので、
ここはそういうスレだからそれ自体を怒りはしないけど、ちっとは考えて回答を読めと。
0465nobodyさん
2005/12/29(木) 23:15:54ID:???ファイルをどのように扱うプログラムなのかが分からんので何とも。
ざっと読んだ限りじゃ、そもそもファイル扱う必要ないんじゃない?って思うけど。
でもやってることはファイル内容をキャッシュして扱ってる、ってのと同じだと思うので、
そういう処理は当然のように整合性問題がついて回るけど、だからといって
その種の手法がナンセンスだとは思わない。必然があるならどんどんやればいい。
検索の高速化やファイルロックの堅実性など、下手に悩むよりずっといいこともある。
メリット・デメリットを全然考えずにやってるならナンセンスなんだろうけどね。
0466nobodyさん
2005/12/30(金) 01:41:08ID:???$hairetu = array(
"a","b"
);
格納してあるんですが、これをランダムに順序を並べ替えて
r,d,c,g,aみたいに40個順に出力するにはどうすればいいでしょうか。
0467nobodyさん
2005/12/30(金) 01:48:09ID:???0468nobodyさん
2005/12/30(金) 02:08:10ID:???0469nobodyさん
2005/12/30(金) 02:11:41ID:???どうも。shuffleなんてあったんですね。
array_randはポケットリファレンスに載ってないのはなんでだろ。
0470nobodyさん
2005/12/30(金) 02:19:29ID:???それに対してarray_rand()はPHP4以降。
そのリファレンス本が古いんじゃね?
つーかPHPは仕様の変化が早いからマニュアル系で良書と呼べる本はあんま無いぞ。
テクニック本ならともかくリファレンスとして使うなら本家なりミラーなりの
オンラインマニュアルに勝るものなし、って感じ。
俺は普段、それをローカルに保存して使ってるけど、それだって年に1度は
保存し直しとかないといつの間にか内容変わってて怖いくらいだ。
0471nobodyさん
2005/12/30(金) 04:18:40ID:???(このスレの回答でも出てきてるfile_get_contents()とか4.3.0で追加された)
戻り値とかの仕様も変わっちゃう(特に配列系はかなり変わってる)んだから、
その辺の安い本なんて読みながらコーディングしてるようなやつは
現場じゃ使い物にならないと思うけどな。
ま、趣味で書いてる分には別に構わないけど、それなら他人に質問すんなって感じ。
自分の使ってるバージョンのマニュアルも読まずに質問するのは失礼じゃね?
0472nobodyさん
2005/12/30(金) 04:30:28ID:???0473nobodyさん
2005/12/30(金) 04:58:26ID:???0474nobodyさん
2005/12/30(金) 10:31:47ID:FPBgif0X「test.php」というファイルに別のディレクトリにあるtest2.phpもしくはtest3.phpというファイルの
どちらを上書きするか、セレクトメニューで選択した方を上書きコピーしたいのですが
■select.php (選択した方を読み込むファイル)
require("filecopy.php");
if ($sentaku == true) { //選択ボタンが押された時コピー実行
copyfile();
}
■filecopy.php(select.phpで呼び出された動作)
function copyfile{
switch ($datafile) {
case "test2": //test2が選択された時はtest.phpにtest2.phpを上書き
chmod ("test.php",0666);
copy ("file/test2.php","test.php");
chmod ("test.php",0666);
case "test3": //test3が選択された時はtest.phpにtest3.phpを上書き
chmod ("test.php",0666);
copy ("file/test3.php","test.php");
chmod ("test.php",0644);
}
という感じで書きましたが、
Fatal error: Call to undefined functionエラーが発生します。
どうすれば良いでしょうか?
0475nobodyさん
2005/12/30(金) 10:37:30ID:???0476nobodyさん
2005/12/30(金) 10:38:17ID:???>Fatal error: Call to undefined functionエラーが発生します。
>どうすれば良いでしょうか?
エラー表示を全部書かないのは嫌がらせか?
あとエラー行の位置を示さないのも嫌がらせの一種だからな。
0477nobodyさん
2005/12/30(金) 10:39:39ID:???()は省略可能かどうかは確認したか?
0478nobodyさん
2005/12/30(金) 10:40:56ID:???つーのは、 〜って関数が定義されて無いのに呼び出そうとしたのでガッした、って事。
0479nobodyさん
2005/12/30(金) 10:41:43ID:???失礼。
Fatal error: Call to undefined function: copyfile() in /home/rika/public_html/test/select.php on line 23
23行目は上のselect.php の copyfile(); の部分
0482nobodyさん
2005/12/30(金) 10:47:04ID:???0483nobodyさん
2005/12/30(金) 10:49:21ID:???呼び出し元も何の引数も与えてないんだからfunction側をいくらいじったところで…
こいつ、PHPとPerlを勘違いしてそうな予感。
そのレベルでいきなりrequireで別ファイル定義してたって解決が遅くなるだけだ。
まず最初のうちはselect.phpの中でfunctionの定義して、動くようになってから分離シレ
0484474
2005/12/30(金) 10:50:44ID:???すいません、select.php側の()を消すとエラーは消えました。
が、コピー動作が作動していない様です。
0485nobodyさん
2005/12/30(金) 10:51:53ID:???エラーに関係ないけど,
switch内のcase文は,きちんとbreakしないと,次のcase文まで実行してしまうよ.
test2が選択されても,最後にはtest3がコピーされるね,このままだと.
0489nobodyさん
2005/12/30(金) 10:59:29ID:???今のうちに言っておくが、エラーがなくなったところでそのコピーは絶対動かないぞ。
$datafileってどっから出てきたんだよ。
「HTMLのフォームで渡してます」とか勘違い回答禁止。
0490nobodyさん
2005/12/30(金) 10:59:34ID:???お前は分かっとるのかと。
ちなみに>>482括弧が空でも動くぞ。
0492474
2005/12/30(金) 11:03:19ID:???$datafileはデータファイル(data.dat)の中に。
例えばtest2を選択した時はdata.datの中には
test2 という値が保存される様になってます。
この値は既に確認済みです。
0493474
2005/12/30(金) 11:06:00ID:???0494nobodyさん
2005/12/30(金) 11:06:38ID:???function copyfile() の中で
print $datafile;
とかやってみれ。でてこねーから。
0495491
2005/12/30(金) 11:07:06ID:???require("filecopy.php");
if ($sentaku == true) { //選択ボタンが押された時コピー実行
ここ
}
に、functionの中身を書けば動くだろが ボケカス氏ね糞
0497491 == 487 != 482
2005/12/30(金) 11:09:17ID:???0499494=487
2005/12/30(金) 11:11:56ID:???PHPはPerlと違って、普通に$datafileとか書くとローカル変数として扱われて
関数内の$datafileとその外の$datafileは別物だから。
0501485
2005/12/30(金) 11:15:50ID:???…いや,これが最初の手段でしょ.
関数を作るのは,その処理を頻繁に行う必要が出てきてから.
>>494で変数が出てこないのは,変数のスコープが違うから.
0502nobodyさん
2005/12/30(金) 11:16:43ID:???最初のうちはprintだけ書いて処理の流れを確認した方がいいと思うぞ。
0503474
2005/12/30(金) 11:19:47ID:???「ファイルは分けた方が動作が軽快」と聞かされてたんで、
requireを使って、動作の目的ごとにファイルを分けてたんです。
>>502
了解です
■ このスレッドは過去ログ倉庫に格納されています