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

【PHP】下らねぇ質問はID出して書き込みやがれ 88

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/09/16(水) 09:39:37ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 87
http://pc11.2ch.net/test/read.cgi/php/1251447028/

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

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

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

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0116nobodyさん2009/09/19(土) 17:06:58ID:???
>>115

http://pc11.2ch.net/test/read.cgi/php/1252590753/151

こっちはどうなんだよ?
0117nobodyさん2009/09/19(土) 17:08:38ID:???
>>115
「どっかの誰かが自分の書き込みをコピペして他スレに勝手に貼り付けた
自分は関係無い、迷惑だ」

こう言いたいのか?
0118nobodyさん2009/09/19(土) 17:16:39ID:???
ID出してないし。
01191102009/09/19(土) 20:39:28ID:???
>>117
>>116
そっちも知らない。

俺はここにしか投下していない。すごく迷惑だ。

真面目に質問しているのに。だいたい、PHPのコードを書いているって
書いてあるのに、他のスレにコピペしているどっかの馬鹿は本当に迷惑
だ。
0120nobodyさん2009/09/19(土) 20:57:28ID:???
>>119
スレタイとテンプレ無視して真面目に質問とは笑える
0121nobodyさん2009/09/19(土) 21:26:39ID:???
まあ、マルチでなくても、ちゃんとID出してたとしても、 いいはず としか。
0122nobodyさん2009/09/19(土) 21:29:13ID:???
大体、ちゃんと関数リファレンス読めば、あっさり解決することだし。
0123nobodyさん2009/09/19(土) 21:32:34ID:???
運営はipアドレスわかってるからな。
マルチかどうかもバレバレ。
0124nobodyさん2009/09/19(土) 21:33:33ID:???
id出さない奴って態度がでかいよな
0125nobodyさん2009/09/19(土) 21:40:09ID:???
ID出さない奴を相手にするなって
本人かどうかも判らんのだから構うだけ無駄だろう
0126nobodyさん2009/09/19(土) 21:51:44ID:???
>>110
真面目にここみてる俺からしたらルールも守れない質問者は激しく迷惑
0127nobodyさん2009/09/19(土) 22:23:06ID:???
ていうか前例がないよな
他人を煽るためにわざわざ他のスレにマルチ装って投稿するって
0128nobodyさん2009/09/19(土) 22:30:44ID:???
反応するな
0129nobodyさん2009/09/19(土) 23:10:30ID:???
>>122
ありがとうございました。

htmlspecialchars関数で解決できました。
0130nobodyさん2009/09/20(日) 01:12:48ID:mauzFl2w
質問。
Mysqlに接続されているかされていないかって簡単に判断する方法はありませんか?
mysql_real_escape_stringあたりがたまにエラー出してて気になるので、
ちゃんとこの関数が使えるかどうかをチェックするための処理がほしいと思っています。
0131nobodyさん2009/09/20(日) 01:21:01ID:???
その関数、mysql接続必要ないだろ、普通に考えたら
3行くらいの、DB接続しないでmysql_real_escape_string呼ぶスクリプト書いて確認してみれ?
0132nobodyさん2009/09/20(日) 01:33:46ID:???
>>131
http://phpspot.net/php/man/php/function.mysql-real-escape-string.html
接続なしで出来るのであれば、ここに質問なんてしませんよ
0133nobodyさん2009/09/20(日) 02:19:52ID:???
>131
>131
>131

>130
mysql_connectした時点で確認しろ。
0134nobodyさん2009/09/20(日) 07:37:56ID:???
律儀にmysql_close呼んでたり?
0135nobodyさん2009/09/20(日) 10:17:42ID:???
>>130
mysql_connect 時にリンクが確立されているのに、
途中でmysql_real_escape_stringが使えなくなるって事?

本来なら途中で使えなくなる原因を特定するべきだけど、
とりあえず、mysql_stat あたりで確認してから
mysql_real_escape_string実行するようなfunction作っちゃえば?
0136nobodyさん2009/09/20(日) 11:32:15ID:???
DBの関数は全部返り値チェックしようよ。
01371302009/09/20(日) 11:52:17ID:???
mysql_statですね。分かりました。
0138nobodyさん2009/09/20(日) 12:07:00ID:???
a, b, c, d, eのキーを持つ配列からa, b, eだけ抽出するようなことって、
ひとつひとつアクセスする以外に方法はありませんか?
0139nobodyさん2009/09/20(日) 12:09:55ID:???
どういう条件で抽出するんだよ
あとスレタイ
0140nobodyさん2009/09/20(日) 12:12:08ID:pS/nR+SK
すみません
a, b, c, d, eをキーに持つ配列xがあったとして、
x->foo(array('a', 'b', 'e'))
みたいにしてa, b, eをキーに持つ配列を得ようとしてるんです
0141nobodyさん2009/09/20(日) 12:30:14ID:???
標準関数には無い
0142nobodyさん2009/09/20(日) 12:48:08ID:???
array_intersect_key(x , array('a', 'b', 'e') )
0143nobodyさん2009/09/20(日) 13:11:52ID:???
>>141
標準関数にあるなしなんて聞いてねえよ
てめえみてえな初心者回答者はすっこんでろ
0144nobodyさん2009/09/20(日) 13:13:26ID:???
>>138
array_mapで再帰的に処理する
0145nobodyさん2009/09/20(日) 13:15:07ID:???
>>142
第二引数はキーで比較だから、array_flip入れないとだめじゃね?
0146nobodyさん2009/09/20(日) 13:21:44ID:b7b/LRof
hetemlっていうレンタルサーバでhtmlをphpとして実行したいんですけど、
.htaccessに
AddType application/x-httpd-php .html
と書いて、htmlへアクセスすると、ブラウザには表示されず、
htmlがダウンロードされてしまいます(phpもそのまま見えてしまう)
どっか設定見落としありますか?
0147nobodyさん2009/09/20(日) 13:46:22ID:???
>>146
サーバー屋さんに聞くべきことだね。
0148nobodyさん2009/09/20(日) 14:22:50ID:???
>>147
ありがとう、自分で契約してる鯖じゃないんで、直接聞くのも時間かかるのでココできいたのでした…
あきらめて鯖屋さん経由をとります
0149nobodyさん2009/09/20(日) 17:42:12ID:61IiHty0
超不思議なんですけど

<?php
class foo {
var $bar = 'I am bar.';
}

$foo = new foo();
$bar = 'bar';
$baz = array('foo', 'bar', 'baz', 'quux');
echo "{$foo->$bar}\n";
echo "{$foo->$baz[1]}\n";
//echo "{$baz[1]}\n";
?>

で、なんで

I am bar.
I am bar.

と表示されるんですか?
一つ目は分かるんですけど、二つ目はてっきりbarだけが表示されると思ったんですけど…
(echo "{$baz[1]}\n"; にすると bar だけになりました)。
ていうか、$foo->$baz[1]って呼んでますけど、$baz[1]ってclass fooのメンバーじゃないんじゃないですか?
何が起こっているのかさっぱり分かりません。
どなたか説明してください。
0150nobodyさん2009/09/20(日) 17:55:56ID:???
>>149

$baz[1] は 'bar'

0151nobodyさん2009/09/20(日) 17:59:36ID:???
あらら。

つまり
$foo->$baz[1] は $foo->bar って解釈される。

$bar = 'bar'
$foo->$bar

が理解できるのなら同じだと思うけどー。
01521492009/09/20(日) 18:04:08ID:61IiHty0
>>150-151
あア、ナルほど!
二段階で変換されてるんですね。
ありがとうございました。
0153nobodyさん2009/09/20(日) 21:10:32ID:???
exif 形式のjpgだとTemp_nameとかその他の情報が取れないんですが、
サーバーに何かが足りないんでしょうか?
0154nobodyさん2009/09/20(日) 21:11:13ID:r/z84N/d
出すの忘れました。
0155nobodyさん2009/09/20(日) 23:12:32ID:qCT4pyHG
おい貴様らひさしぶりだなシルバーウィークは楽しんでるかね
SQLiteの使い方がわからねえんだけどこれはどこにデータが保存されるのか教えてくんない?
0156nobodyさん2009/09/20(日) 23:14:16ID:???
ストアドプロシージャ
0157nobodyさん2009/09/20(日) 23:34:49ID:7Axymed3

文字コードで

wMOV8seKwJSdvpCElt0←こういうタイプのエンコード何を使ってるのか分かる人いませんか?
0158nobodyさん2009/09/20(日) 23:42:44ID:???
Base64
0159nobodyさん2009/09/20(日) 23:50:48ID:7Axymed3
base64_encodeか
ありがとう
0160nobodyさん2009/09/21(月) 00:11:27ID:???
>>155
拡張子 db  のファイルがそれ。

Accessと同じく、単体のデータベースファイルとなっている。
SQLite 2用のODBCドライバがあるから、それを利用すれば、
Accessからも接続ができる。
http://www.ch-werner.de/sqliteodbc/

ウェブとの親和性も高いから、mdb形式よりも使い勝手はいい
かもしれない。
0161nobodyさん2009/09/21(月) 00:38:11ID:???
> ウェブとの親和性も高いから、mdb形式よりも使い勝手はいい
> かもしれない。
シングルユーザ
データベース全体ロック
0162nobodyさん2009/09/21(月) 00:41:54ID:???
途中で送信してしまったスマン

SQLiteは上記の問題があってウェブアプリケーションには向いてない
スタンドアロンで動くからこそ重宝されてる
0163nobodyさん2009/09/21(月) 01:04:55ID:???
どうやってもファイルである以上ファイル単位でロックされるのは仕方ないんだなあ
0164nobodyさん2009/09/21(月) 05:48:17ID:???
>>161-162
WebAppって(もしくは用途によっては)SELECTがほとんどだからファイルロックの
影響はそれほど無いと思ってたんだけど、読み込みでもロックの被害甚大?

0165nobodyさん2009/09/21(月) 07:00:02ID:5/lX4mwC
ちょっとスレ違いかもしれませんが質問させてください。
よくフォームなどで、
そのページで入力された値を自身のファイルで受け取り、
チュックし、セッションに保存して、
次の確認ページなどに飛ばす
という一連の動作を使います。
このときフォームのactionに指定するURIは
自身のページのURIになるのですが、
いちいち自身のURIを記述するのは煩わしいですし、
コードの融通性の観点からもあまりよろしくないと思われます。
そこでフォームのactionに自身のURIが指定されるようにしたいのですが、
どのような方法がベストなのでしょうか?
考え付いたのは

1・$_SERVERで取得しactionに指定。
 今のとこ自分の中で最有力候補?

2・actionに値を指定しない
 これで自動で自身のページに飛ぶかと思いきやダメでした…。

3・セキュリティーの観点から絶対にきちんとURIを記述し指定する。
 本末転倒ですが、取得するのは危険だという可能性もあるかと思います。

見当違いなこと書いてるかと思われますが、
ベストな方法をご教授ください。
0166nobodyさん2009/09/21(月) 09:06:39ID:???
>>164
でも、MTなんかではSQLite使われているよね
0167nobodyさん2009/09/21(月) 09:52:29ID:???
>164
読み出しはスケールさせるのが比較的簡単だが、書き込みはスケールしにくい
DB全体ロックだと、利用者が増えると比較的すぐ行き詰ると思う

MTなんかは、書き込みをするユーザー数が少ないからあまり問題がないのだろう
恐らく設置の容易さを取ったんだろうな
0168nobodyさん2009/09/21(月) 09:57:05ID:???
>>166
MTって、
書き込みは、ロックで待たせても別にいいだろうし、
読み出しは再構築のときくらいでしょ。それもロックで待たせておk。

って、触ってたのは3年くらい前のことなんで、
近頃では再構築不要とか言うなら、また違う話になるかもしれん。
0169nobodyさん2009/09/21(月) 10:04:51ID:xFfP11ss
【OS名】linux
【PHPのバージョン】php5
【連携ソフトウェア】
【質問内容】
htmlに
�@html
�APHP
�Bhtml
のようにPHPを使ってますが
Fatal error: Maximum execution time of 5 seconds exceeded
になった場合この�AのエラーのPHP処理をスキップさせて
�Bを表示したい場合どうすればいいですか?
0170nobodyさん2009/09/21(月) 10:26:12ID:???
要するに、エラーが起きてもおきなくても(3)の部分を表示させたい、と?

(1)
(3)
(2)

の順に記述する。
(2)のPHP部分でも(正常なら)何かを表示するので、上のようにしたら見た目上の位置関係が
崩れるというのなら、スタイルシートで対応。
では駄目かの?

でもなあ、5秒超かかる処理ってどんなの?
そういう処理が十分有り得る状況なら、5秒で致命的エラーとされる設定の方を何とかすべき
だろうし、そうでないなら、5秒以上かかってしまっていることを何とかすべきじゃなかろか。
0171nobodyさん2009/09/21(月) 10:27:46ID:???
>>169
エラー制御の@入れてみては?
0172nobodyさん2009/09/21(月) 11:22:59ID:c8BcA53t
PHPって
$string = "もじ";

$string = (function($string){
    return $string.$string;
})();
echo $string; //もじもじ

のように無名関数を使うことは出来ないのですか
0173nobodyさん2009/09/21(月) 11:27:07ID:???
できるお
0174nobodyさん2009/09/21(月) 12:16:54ID:???
>>172
ダサいけどね
ttp://www.php.net/manual/ja/function.create-function.php
0175nobodyさん2009/09/21(月) 12:28:34ID:c8BcA53t
>>174
文字列を渡すのか・・これはひどい
ありがとう
0176nobodyさん2009/09/21(月) 12:30:33ID:???
>>174
>>175
お前らは何を言ってるんだ
http://www.php.net/manual/ja/functions.anonymous.php
0177nobodyさん2009/09/21(月) 12:31:22ID:/inoxiUx
windowsでphp5.3を使いたいのですがスレッドセーフとかいうのが2種類あってどっちを使えばいいですか?
0178nobodyさん2009/09/21(月) 12:35:57ID:???
スレッドセーフにしたい時はスレッドセーフ版
スレッドセーフにしたくない時はノンスレッドセーフ版
0179nobodyさん2009/09/21(月) 12:37:46ID:/inoxiUx
Apache使ってるんですけどスレッドーセーフとスレッドセーフにしないを切り替えるにはどうしたらいいのでしょうか?
あとスレッドセーフにするとどうなるんですか?
0180nobodyさん2009/09/21(月) 12:38:49ID:???
それくらいはぐぐってください
0181nobodyさん2009/09/21(月) 12:38:54ID:c8BcA53t
>>176
javascriptなどで実装されている("(function(){〜})()"のような)スマートな使い方は出来ないかなあと思って質問しました
0182nobodyさん2009/09/21(月) 12:39:38ID:???
リンク先読んだの?
01831692009/09/21(月) 12:43:41ID:???
ご返信ありがとうございます。
>>171
@ではちょっと無理でした。
>>172
スタイルシートは出来る限り使わない方法を探しています。
通常は1秒もかからないんですがなぜかたまにタイムアウトに?
すべて自作ではなくPEARを使った処理なのでその内部をいじれるほどPHPに慣れてないので
なんらかの方法でスキップができればと思います。

0184nobodyさん2009/09/21(月) 12:52:24ID:c8BcA53t
>>182
読みました。

例2 変数への無名関数の代入
$greet = function($name)
{
  printf("Hello %s\r\n", $name);
};
$greet('World');
たとえばこれは変数に関数を代入していますが直接結果を代入したいのです。

このような感じで既存のコードを置き換えたいと思っています

function example(){
  return "aaa";
}
$test = example();//aaaが返り$testにaaaが代入される

↓
$test = (function(){//aaaが返り$testにaaaが代入される
  return "aaa";
})();//関数を()で囲って末尾の()で関数を実行している


ググったら無理なようであきらめます・・PHP6で実装されることを祈りながら
0185nobodyさん2009/09/21(月) 13:11:03ID:???
>>184
PHPは構文解析周りが貧弱なので諦めて下さい

俺も下記とかやりたいわ…
$a = new stdClass():
$a->b = function () {};
$a->b();
0186nobodyさん2009/09/21(月) 13:19:50ID:???
>>185
それはできるんじゃ?
0187nobodyさん2009/09/21(月) 13:40:18ID:rQWWzoEt
【OS名】win32
【PHPのバージョン】php5.3.0
【質問内容】
外部からGETで取得した値が数字でも、is_intで整数値じゃないと言われてしまいます。
外部から取得した値が整数かを調べる方法はありますか?
0188nobodyさん2009/09/21(月) 13:44:34ID:???
>>186
まじっすか!
と思ってPHP6のスナップショットまで確認したけどできないじゃないか
ぬかよろこびさせやがって畜生…
0189nobodyさん2009/09/21(月) 13:47:14ID:???
数値の12+34は46だが、文字の"12"と"34"を足すと"1234"になる。
文字の"1"と数値の1は本来は別物。PHPは必要に応じて自動で変換してくれるからあまり意識しないけどな。
is_intは1を許可し、"1"は許可しない、PHP内では珍しい関数(というか、両者を区別するための関数)

多分最速なのはctype_digit()。ただし、"009"とかが通るし"-10"は通らない。
あとは「整数値」のルール次第。たとえば、負の整数や0はどうするんだ?"009"は?(郵便番号とかなら有効だよな)
0190nobodyさん2009/09/21(月) 14:00:03ID:???
intvalで変換してif使って
0191nobodyさん2009/09/21(月) 14:14:12ID:rQWWzoEt
>>189,190
回答ありがとうございます。
自然数以外を弾きたかったので最初に ctype_digit() で数字以外を弾いて preg_match("/(^0)(\d)/" , "") で009等を弾くことにしました。
0192nobodyさん2009/09/21(月) 15:02:06ID:???
>>191
それだと動かないよ先頭に数字が付けば1が返る(1abcdもOKになる)
先頭に"-"も含めるなら /^-*[^0](\d)+$/
0193nobodyさん2009/09/21(月) 15:03:51ID:???
あーctype_digit()で弾いてるのか
でもctype_digit()の後にpreg_matchするならpreg_matchだけで済ました方がいいんじゃないかな
0194nobodyさん2009/09/21(月) 15:13:16ID:???
[^0]だと0以外何でもありになるから /^-*[1-9]\d+$/ だな
0195nobodyさん2009/09/21(月) 15:18:32ID:???
それ--11も受け付けるし2桁以上ないと受け付けないから /^-?[1-9]\d*$/ だろ
0196nobodyさん2009/09/21(月) 15:50:25ID:???
自然数と言ってるのにマイナス付けてどうする
$はD修飾子なしじゃ改行にもマッチするぞ
01971892009/09/21(月) 17:01:17ID:???
と、ご覧のように、正規表現は分かりづらい上にバグの原因にもなりやすい。
こんな下らん事で悩む時間が惜しい。>190に一票。
01981652009/09/21(月) 17:19:58ID:SD2dtHFE
だれか165お願いします。。。
0199nobodyさん2009/09/21(月) 17:22:27ID:???
ベストなんて無いよ
0200nobodyさん2009/09/21(月) 17:23:46ID:???
>>198
$_SERVERからとってるかなぁ

でも値のチェックはするべき。
0201nobodyさん2009/09/21(月) 17:49:34ID:uPBGfkai

あ
0202nobodyさん2009/09/21(月) 18:02:57ID:???
>>198
2がダメならいちいち書いた方がいいんじゃないか
02031982009/09/21(月) 18:30:02ID:FunJFz74
>>200
ドメインなんかをチェックすることを考えたら、
直書きのがパフォーマンスもいいしセキュリティ的にも安心なんですね。
サイト内検索の場合、どのページでも使うので手書きは避けたいのですが…。

>>202
やっぱりそうですか。
0204nobodyさん2009/09/21(月) 18:35:29ID:???
$_SERVER['PHP_SELF]を使わないで
$_SERVER['SCRIPT_NAME']を使っていれば良いと思う
もちろん値の確認は必要だが。
0205nobodyさん2009/09/21(月) 18:49:16ID:???
>>203
basename(__FILE__);で自分自身のファイル名が取れるよ
0206nobodyさん2009/09/21(月) 20:02:54ID:MAV91RaJ
自サーバのMACアドレスを知るにはどうしたらいいですか?
0207nobodyさん2009/09/21(月) 20:16:04ID:???
>>206
環境は?

ifconfigの結果から取得するとか。
0208nobodyさん2009/09/21(月) 20:17:07ID:???
ifconfig(windowsはipconfig /all)でコマンドから取得しれ
0209nobodyさん2009/09/22(火) 00:18:54ID:cla4TgUg
なんかさっき2ちゃんねらーっぽい4人組みと道ですれ違った
0210nobodyさん2009/09/22(火) 00:58:13ID:???
逝ってよし
オマエモナー

ってな会話でもしてたか?
0211nobodyさん2009/09/22(火) 02:17:23ID:???
鯖移転とか感謝厨とか話してたんじゃね?
0212nobodyさん2009/09/22(火) 11:42:42ID:Mwzzxg9y
テンプレートとデータを分けたときのキャッシュファイルの作り方がわかりません
大まかにどのような仕組みなのでしょうか?
0213nobodyさん2009/09/22(火) 12:06:16ID:???
どこでキャッシュするかによるな。一番外側でキャッシュするなら
例えばhoge.php?aaa=1&bbb=2とかいうページで(他に変数なし)、ユーザーによって表示内容が違ったりしないという前提で
 1.普通に処理して画面表示するが、ついでにhoge_1_2.htmlとかいうファイルに結果を書き出しておく
 2.アクセスが来たらパラメータに応じてhoge_?_?.htmlというファイルを探す。あればそれを読み込んでそのまま画面表示する
  なければ1同様に普通にに処理してファイルに書き出して画面表示する
 3.この際、htmlの方には有効期限を決めておく。読み込みの際に更新日時をチェックし、古かったら消す。
  あるいは、データが更新されるとかでキャッシュが無効になるタイミングがあるなら、その時に消すというルールでもいい。
という機構を実装するのが一番シンプル。
ファイルじゃなくてmemcacheとか使ってもいいし、phpに処理を渡さずにwebサーバだけでなんとかする手段もあるし
リクエストがあったその場で生成するんじゃなくてデータが更新された時点でHTMLを書き換える手もあるし、その辺は色々。

上記は「あるリクエストに対し、どういうHTMLが返るか」をキャッシュしたわけだが。
一歩内側でキャッシュするなら、「あるリクエストに対し、どういうデータがテンプレートに渡るか」だけをキャッシュする手もある。
さらに内側だと、「あるSQLに対し、どういうデータが返るか」をキャッシュしても速度は向上する。
0214nobodyさん2009/09/22(火) 12:13:10ID:???
ページをキャッシュしファイルかメモリかDBにURIとタイムスタンプを記録して
そのURIに次にアクセスがあったときにタイムスタンプと比較してライフタイム以下だったら
キャッシュを出力、越えてたりデータが更新されてたら新たに生成して出力しする、

民主に入れたならそれ位わからなきゃねw

0215nobodyさん2009/09/22(火) 12:15:21ID:???
この60年で日本が劣化したのは自民信者が原因だったことがよく分かった
■ このスレッドは過去ログ倉庫に格納されています