【PHP】下らねぇ質問はID出して書き込みやがれ 88
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
2009/09/16(水) 09:39:37ID:???過去スレ、関連スレ、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等)・フレームワークは各該当スレへ
0893nobodyさん
2009/10/09(金) 14:41:24ID:???0894nobodyさん
2009/10/09(金) 14:43:30ID:tvzB35Y7>>887
わからないならスレ汚しになるのでいちいちレスしなくていいですよ
>>888
的確なお答えありがとうございます
レン鯖なので制限かかってるみたいです
ありがとうございました
0895nobodyさん
2009/10/09(金) 14:50:13ID:???http://www.google.co.jp/search?hl=ja&rlz=1B3GGGL_ja___JP215&tbo=p&tbs=qdr%3Ay15&q=%28shell+OR+%E3%82%B7%E3%82%A7%E3%83%AB%29+fork+%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9&btnG=%E6%A4%9C%E7%B4%A2&lr=
0896nobodyさん
2009/10/09(金) 14:53:49ID:???0897nobodyさん
2009/10/09(金) 14:58:55ID:???【PHPのバージョン】php5.1.6
【連携ソフトウェア】特になし
【質問内容】
mb_convert_kana() の文字化けに困っています。
$ins_s = "?`?a?b?cアイウエオ";
var_dump($ins_s);
$out_s = mb_convert_kana($ins_s, "KSA", "SJIS");
var_dump($out_s);
スクリプトの文字コードはSJISです。
上記のソースで以下の様に $ins_s の4文字(fa60, fa61, fa62, fa63)が?(3f)に化けます。
string(13) "?`?a?b?cアイウエオ"
string(14) "????アイウエオ"
化ける文字は上記の文字に限らず、第3水準(FA40 - FC4Bに配置されている文字)
の文字だと概ね化けるようです。
php.ini の関連すると思われる設定は以下の様にしています。
解決方法があればお願いします。
mbstring.language = Japanese
mbstring.internal_encoding = SJIS
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off
0900nobodyさん
2009/10/09(金) 22:57:41ID:???0901nobodyさん
2009/10/09(金) 23:02:11ID:???0902nobodyさん
2009/10/09(金) 23:27:17ID:+N74k5r8登場人物
マニュアル君
正規表現クン
0903nobodyさん
2009/10/09(金) 23:28:44ID:???0904nobodyさん
2009/10/09(金) 23:34:06ID:+N74k5r8オメー自分のレスをよく読んでからからにしろ
テンプレに追加
揚げ足鳥クン
0905nobodyさん
2009/10/09(金) 23:35:31ID:???0906nobodyさん
2009/10/09(金) 23:35:45ID:???0907nobodyさん
2009/10/09(金) 23:38:50ID:+N74k5r80908897
2009/10/10(土) 00:29:37ID:???あ、投稿も化けてますね…。
> $out_s = mb_convert_kana($ins_s, "KSA", "sjis-win");
これで解決しました。�d。
0909nobodyさん
2009/10/10(土) 03:41:41ID:K/ciw02z【PHPのバージョン】xampp-win32-1.7.2に入っているバージョンで多分最新だと思います。
【連携ソフトウェア】なし。
【質問内容】
<?php
$str = 'プログラム1/PHP';
//カタカナ1文字以上+半角数字1文字+「/」+半角英大文字1文字以上にマッチ
if(mb_ereg("([ア-ン]{1,}[0-9])/([A-Z]{1,})", $str, $ARRAY)){
print $ARRAY[0];
echo "<pre>";
print $ARRAY[1];
echo "<pre>";
print $ARRAY[2];
}
↑を実行すると↓の表示になります。
[ア-ン]{1,}で、『プログラム』を全部拾えないのでしょうか?
ム1/PHP
ム1
PHP
0910nobodyさん
2009/10/10(土) 04:19:11ID:???0911nobodyさん
2009/10/10(土) 06:08:24ID:CsfH1goLトンチンカンな回答ばかりで、
解決ができなったので、
こちらでお伺います。
ユーザーIDに漢字を使いたいという客がいるのですが、
ユーザーIDに漢字を使うことの致命的なデメリットはなんでしょうか?
私もつかった事例がないので、分かりませんが、
文字コードの問題などは技術的に解決できると思うのですが。
宜しくお願いします。
0912nobodyさん
2009/10/10(土) 07:45:49ID:???0913nobodyさん
2009/10/10(土) 07:48:24ID:???実際、ゲームのサイトとかで漢字のユーザーIDが使えるところは結構あるだろ?
>>911の意図するユーザーIDとは違うのかもしれないが。
0914nobodyさん
2009/10/10(土) 07:49:55ID:???コンピューターはもともと欧米が先進となって
英数字などの1バイト文字を扱うことを前提に設計されてきたので
昨今の国際化によって徐々にマルチバイト文字でも問題ないようにはなってきてるが
やはりそれでもコンピューターにとって扱いやすいのは1バイト文字であるということ
そんな事情で通常コンピューターに処理させるような工程には1バイト文字を使うことが多い
マルチバイトにすることによって発生するデメリットといえば
処理速度が少し落ちるということぐらいではないかな
0916nobodyさん
2009/10/10(土) 09:02:39ID:???0917nobodyさん
2009/10/10(土) 09:10:11ID:???そもそもこれあかんでしょ。SJISはバグつきなんだから基本的にご法度だよな。
別にユーザ名漢字でもいいけど、エスケープするからそのまま読み取れないし、長くてデータの無駄遣いだろ。
個人的にはヤダ。
0918nobodyさん
2009/10/10(土) 09:21:56ID:???おいおいこの程度の知識で語って大丈夫か?
0919nobodyさん
2009/10/10(土) 09:32:36ID:???テンポラリフォルダなんかのユーザー毎に分けられるエントリに全角文字が含まれて、
それが原因で上手く動かないアプリケーションが出てきたりする。
そういう状況を嫌って全角文字を避けたりするような。
「上手く動かないアプリケーション」を修正するなり使わないなりする選択肢もあるけど、
それにかかるコストに比して、得られるものは結局のところ自己満足でしか無いというか。
>>913のいうようなゲームのサイトみたいに、
一定の閉鎖環境であれば検証・修正にかかるコストも限定化されるけど、
パソコンみたいに不特定のアプリケーションが入ってくる環境だと切りが無いよね。
0920nobodyさん
2009/10/10(土) 10:04:47ID:???0921nobodyさん
2009/10/10(土) 10:06:11ID:???0922nobodyさん
2009/10/10(土) 10:37:42ID:???SJISでdate("Y年m月d日")とかやると
年(0x944E)とdate関数のformat文字「N(0x4E)」がかぶってるために文字化けする。
こういうのを一つ一つ意識して作るのが面倒ならSJIS以外を使った方がいいよ。
0923nobodyさん
2009/10/10(土) 10:48:36ID:???その処理の前にmb_regex_encoding('SJIS');
UTF-8なら"UTF-8"。
php.iniのmbstring.internal_encodingを編集してもいい。
正規表現はそれで問題ないが、「1文字以上」は普通+を使うと思う。つまり"([ア-ン]+[0-9])/([A-Z]+)"。
0924nobodyさん
2009/10/10(土) 12:44:41ID:???デリミタが入ってない件
ereg系は推奨できない件
mb_ereg("![ア-ン]+[0-9]+?/[A-Z]+!", $str, $ARRAY)
0926909
2009/10/10(土) 12:50:11ID:K/ciw02zおお、ありがとうございます。
>mb_regex_encoding('SJIS');
で、解決しました。 感謝します。
しかし、この SJISとUTF-8の違いがなんだかさっぱりわかりませんw
0928909
2009/10/10(土) 13:20:07ID:K/ciw02z<?php
mb_regex_encoding('SJIS');
$str = 'プログラム1/PHP';
if(mb_ereg("([ア-ン]+[0-9])/([A-Z]+)", $str, $ARRAY)){
print $ARRAY[0];
echo "<pre>";
print $ARRAY[1];
echo "<pre>";
print $ARRAY[2];
}
↑だと意図した通りに表示されるのですが、↓だと何も表示されません。 これはどういうことでしょうか?
<?php
mb_regex_encoding('SJIS');
$str = 'プログラム1/PHP';
if(mb_ereg("!([ア-ン]+[0-9])/([A-Z]+)!", $str, $ARRAY)){
print $ARRAY[0];
echo "<pre>";
print $ARRAY[1];
echo "<pre>";
print $ARRAY[2];
}
0929nobodyさん
2009/10/10(土) 13:35:54ID:ogMq/uQO0930nobodyさん
2009/10/10(土) 13:44:39ID:???正規表現勉強しろ。
"([ア-ン]+[0-9]/[A-Z]+("
でもいけるんじゃない?
>>929
(a+b)/c は a+b/c とちがうからな。
0931nobodyさん
2009/10/10(土) 13:50:10ID:????
([ア-ン]+[0-9])/([A-Z]+)と書かないで[ア-ン]+[0-9]/[A-Z]+でいいだろって言ってんの
0932nobodyさん
2009/10/10(土) 14:58:00ID:???924の言う事は嘘
mb_ereg()にデリミタは存在しない
>>931
mb_ereg()の第三引数の意味調べな
0933nobodyさん
2009/10/10(土) 15:40:59ID:???「漢字を使う」て具体的にどういうことかなあ。
ユニークにならないとダメだから
一、二、三。。なら使えるけど例えば名前だとダメ。
というわけでシステム?が勝手に割り振るのならまだしも
「利用者が好きな文字を選ぶ」ってことなら
被ってないかの検証もいるねー。
0934nobodyさん
2009/10/10(土) 17:57:54ID:???坊っちゃん(1906年4月、春陽堂刊『鶉籠』収録)
草枕(1906年9月、『新小説』/『鶉籠』収録)
...
--------------------------------------------------
の様な文章から、
$author($date、$entry)
の様な指定で、文字列を取得するのに、良い関数はないでしょうか。
0936nobodyさん
2009/10/10(土) 18:31:07ID:???0937909
2009/10/10(土) 18:34:52ID:K/ciw02z> 924の言う事は嘘
> mb_ereg()にデリミタは存在しない
どうもです、了解しました。
0938nobodyさん
2009/10/10(土) 19:49:22ID:WBQCef66質問20問をラジオボタンで答えてもらい、結果を判定するサイトです。
ラジオボタンの値は、20問すべて(0,1,2)のどれか3つです。
これ以外の数値、又は、文字列がポストされた場合、
エラーメッセージを表示したいのですが、上手くいきません。
(0,1,2)のすべて正常な場合もエラーになってしまいます。
8月からPHPを始めたばかりなので、初歩的なミスかとも思いますが、
よろしくお願いします。
if ($data = $_POST){
foreach ($data as $value) {
if (($value != "0") || ($value != "1") || ($value != "2")){
$er_ms = '不正な値が入力されています';
$_SESSION['er_ms'] = $er_ms ;
header('Location: http://hoge.jp/hoge.html');
exit;}}
}
0939nobodyさん
2009/10/10(土) 19:54:47ID:???でしょ?
||じゃなくて&&
0941nobodyさん
2009/10/10(土) 20:26:45ID:WBQCef66ありがとうございます。
どうしてエラーにひっかかるのか理解できました。
なるほどです。これで一歩前進できました。
0942nobodyさん
2009/10/10(土) 20:27:14ID:???0943nobodyさん
2009/10/10(土) 21:17:44ID:WBQCef66レスありがとうございます。
不等式も考えたのですが、整数以外の桁数の多い小数など
を入れられた場合もエラーにした方が良いと思い、>>938 のように
してみました。
だけど、&&で大丈夫だと思ったら、どこか別のとこがおかしいみたい。。
再度、検討中です。
0944nobodyさん
2009/10/10(土) 21:54:43ID:???ありがとうございました。
なんとか && で出来たみたいです。
構文がおかしいのかと考えていたのですが、
if文の中に、if文を入れ子にしていて、どこかおかしくなってたみたい。
if文を独立させたら、やっと動きました。
ありがとう!
0945nobodyさん
2009/10/10(土) 22:04:23ID:Y6o2B77j画像アップロードについての質問です。
たとえばSNSみたいなサイトを作るとき、プロフィール写真とかを
アップロードすると思います。
アップロード(保存)の仕方について、二通りあるとおもいます。
・DBに保存する(mediumblobとかで)
・img/とかのファイルに保存する
後々のこと(ajax使うとか、サムネイルを作るとか)を考えたとき、
どっちがいいのでしょうか?
できたらその理由も教えてください。
0946nobodyさん
2009/10/10(土) 22:33:57ID:m/iUbtet現在pixivが落ちてますがphpの糞仕様が原因ですか?
それともphperのノースキルが原因ですか?
0948nobodyさん
2009/10/10(土) 22:50:05ID:???SNSの場合、一般的には全てデータベースで運用するので、
写真用にわざわざ管理領域を広げるよりもデータベースで一緒にやってしまったほうがいい。
0949nobodyさん
2009/10/10(土) 22:50:37ID:m/iUbtet0950nobodyさん
2009/10/10(土) 23:49:25ID:4SjhHbkn先輩方、ご回答よろしくお願いします。。。 Orz
0951nobodyさん
2009/10/10(土) 23:53:05ID:???0953nobodyさん
2009/10/11(日) 05:58:56ID:???0954nobodyさん
2009/10/11(日) 07:32:32ID:???有名どころのプログラムならコードもきれいだと重い、phpBB、XOOPS、WordPressなどを
ダウンロードしてみましたが、どれもdefineや関数で名前空間汚しまくりでした。
defineが必ずしも悪とも思いませんが、上記のような大規模なプログラムでは望ましくないと思ってます。
読んでて気が引き締まるような美しいPHPのプログラムを教えてください。
0959nobodyさん
2009/10/11(日) 11:32:46ID:???0960nobodyさん
2009/10/11(日) 11:33:14ID:???関数とdefineが気にくわないなら、
とりあえずZend FrameworkとZend Frameworkコーディング規約嫁。
>phpBB、XOOPS、WordPress
PHPでOOPをやろうって習慣が無い時代のコードなので仕方無い。
まぁ大規模コードを書く場合はコードの美しさより、設計の美しさの方が可読性に影響すると思うが。
0961nobodyさん
2009/10/11(日) 11:58:07ID:I91rw7dl俺様が勉強させてやるから感謝しろよks
smartyでテンプレートとデータを分けて出力結果みたいにするにはどうやればいいのか教えろ
HTMLのテンプレート
<html>
<head>
<title>{$title}</title>
</head>
<body>
<h1>{$h1}</h1>
</body>
</html>
データファイル
<?php
$title="ホームページ";
$h1="見出し1";
?>
出力結果
<html>
<head>
<title>ホームページ</title>
</head>
<body>
<h1>見出し1</h1>
</body>
</html>
0962nobodyさん
2009/10/11(日) 12:04:08ID:???0963nobodyさん
2009/10/11(日) 12:04:53ID:I91rw7dl0964nobodyさん
2009/10/11(日) 12:09:05ID:???0965nobodyさん
2009/10/11(日) 12:21:47ID:???そんなのチュートリアルレベルだろ。
その辺の入門解説読んでも分からんのなら、どこがどう分からないかを書くべし。
0966nobodyさん
2009/10/11(日) 12:55:25ID:???学校の宿題か何かだろう。
0967nobodyさん
2009/10/11(日) 13:04:53ID:???どこかでassignしなきゃ一生出力されない
あとはググれカス
0968nobodyさん
2009/10/11(日) 13:18:15ID:I91rw7dlそんな事貴様に言われなくてもわかってんだよks
smartyでのやり方を聞いてんだksg
0970nobodyさん
2009/10/11(日) 14:01:36ID:I91rw7dlてめえうぜええぞksg
0971nobodyさん
2009/10/11(日) 15:08:32ID:???0972nobodyさん
2009/10/11(日) 15:55:44ID:???・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0974nobodyさん
2009/10/11(日) 16:17:24ID:Brpi1lwUまずはデータベースを作りました:
mysql> CREATE DATABASE idemailpeopl
mysql> USE idemailpeople;
mysql> CREATE TABLE people (id INT NOT NULL PRIMARY KEY, email TEXT);
mysql> INSERT INTO people SET id = 42, email = "[email protected]";
…そして、下のようなクエリを書いてみました:
<?php
$link = mysql_connect('localhost', 'root', '');
mysql_select_db('idemailpeople');
$result = mysql_query("SELECT id, email FROM people WHERE id = '42'");
$result = mysql_query("INSERT INTO people SET id = 1, email = '[email protected]'");
echo mysql_info($link);
?>
…ちゃんとMySQLには反映されていて id = 1, email = '[email protected]' は新しく挿入されましたが、何も表示されません。
直近のクエリについての詳細な情報を得るにはどうしたら良いのか教えてください。
0976nobodyさん
2009/10/11(日) 18:20:07ID:???>INSERT ... VALUES 文で mysql_info() が非 FALSE 値を 返すのは、
>文中で複数の値のリストが指定された場合に限ります。
って書いてるじゃん
MySQL APIのページにも
http://dev.mysql.com/doc/refman/4.1/ja/mysql-info.html
>注意:
>mysql_info() は、INSERT ... VALUES ステートメントが複数レコードを挿入する形式の場合に限り
>(複数の値リストが指定された場合に限り)、NULL 以外の値を返します。
おそらくPHPのmysql_info()は同名のこのAPI使ってるんでしょ
そのSQLじゃNULLかFALSEが返ってきてるということなのでは?
ためしに複数のレコードを挿入して確認してみるといい
0977974
2009/10/11(日) 19:34:54ID:Brpi1lwU>>975
echo mysql_error();にしてもメッセージは出てきませんね。
>>976
$result = mysql_query("INSERT INTO people SET id = 11, email = '[email protected]'");
$result = mysql_query("INSERT INTO people SET id = 12, email = '[email protected]'");
…のように複数のレコードを同時に挿入してみましたが、やはり何も表示されません。
既に登録されているidを挿入しようとすれば、当然「重複している」とエラーが出ます。
実際にmysql_info()が値を返すような複数のクエリを教えてください。
0978nobodyさん
2009/10/11(日) 20:30:37ID:???var_dump(mysql_info($link));
にしたらどうなってる?
0979nobodyさん
2009/10/11(日) 20:34:50ID:???$result = mysql_query("INSERT INTO people select * from people "); で 確認できました。
で、複数レコードではないのですが、
$result = mysql_query("INSERT INTO people select 333, '777' "); でも
Records: 1 Duplicates: 0 Warnings: 0
と出ました。
0980nobodyさん
2009/10/11(日) 20:40:51ID:???>>976のリンクに書いてあるでしょ
> INSERT INTO ...SELECT ...
> 文字列の形式: Records: 100 Duplicates: 0 Warnings: 0
> INSERT INTO ...VALUES (...),(...),(...)...
> 文字列の形式: Records: 3 Duplicates: 0 Warnings: 0
> LOAD DATA INFILE ...
> 文字列の形式: Records: 1 Deleted: 0 Skipped: 0 Warnings: 0
> ALTER TABLE
> 文字列の形式: Records: 3 Duplicates: 0 Warnings: 0
> UPDATE
> 文字列の形式: Rows matched: 40 Changed: 40 Warnings: 0
0981980
2009/10/11(日) 20:45:10ID:???誰か頼む
0983nobodyさん
2009/10/11(日) 21:19:38ID:???http://pc11.2ch.net/test/read.cgi/php/1255263534/l50
0984974
2009/10/11(日) 21:21:11ID:Brpi1lwU>var_dump(mysql_info($link));
Bool(false)でした。
>>979
> result = mysql_query("INSERT INTO people select * from people ");
一回目から"Could not run query: Duplicate entry '1' for key 'PRIMARY'"と出ました。
>$result = mysql_query("INSERT INTO people select 333, '777' ");
これはちゃんと出ました!:
Records: 1 Duplicates: 0 Warnings: 0
>>980
よぉうやく意味が分かりました。
INSERT INTO ...SELECT ... を INSERT INTO ... SET ... と勘違いしていました。
でも、ここだけ実例が省略されてるのってズルいですよ。
初めての人には分かりませんって。
…以上、ありがとうございました!
0985nobodyさん
2009/10/12(月) 10:33:10ID:???今までのApacheよりも、処理速度で1.8倍向上している。
メジャーバージョンアップでもよかったんじゃないか?
0986nobodyさん
2009/10/12(月) 15:31:26ID:???そういうのは誤差の範囲内で流されるんだよ
0987nobodyさん
2009/10/12(月) 17:31:45ID:???@演算子使わないとか$_POST使う前にissetで調べるとか==を===に置き換えるとか
0988nobodyさん
2009/10/12(月) 17:35:42ID:???0989nobodyさん
2009/10/12(月) 17:43:32ID:???わからん
0990nobodyさん
2009/10/12(月) 18:11:11ID:???コメントなくして動かすのじゃどのくらい差が出るかやってみてくれ
0992nobodyさん
2009/10/12(月) 18:31:48ID:???やってみた。厳密等価の方が3割〜1割程度早くなった
結果
厳密等価演算子
0.0059380531311035s
0.0058860778808594s
0.0058920383453369s
0.0058870315551758s
0.0058879852294922s
0.0059118270874023s
0.0059001445770264s
0.0058870315551758s
0.0058960914611816s
0.0058901309967041s
等価演算子
0.0065038204193115s
0.0064949989318848s
0.0064928531646729s
0.006479024887085s
0.0064821243286133s
0.0064840316772461s
0.0064849853515625s
0.006479024887085s
0.0064759254455566s
0.0064809322357178s
レス数が950を超えています。1000を超えると書き込みができなくなります。