【PHP】下らねぇ質問はここに書き込みやがれ 40
■ このスレッドは過去ログ倉庫に格納されています
00011様
2007/02/22(木) 22:37:41ID:???PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 39
http://pc10.2ch.net/test/read.cgi/php/1171280039/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc10.2ch.net/php/subback.html
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで http://pc10.2ch.net/db/subback.html
0685nobodyさん
2007/03/02(金) 19:21:56ID:???サニタイズ脳に答えるなんて親切だろ?
preg_replace("/\'|\"|\&|\<|\>/", "", $str);
0686nobodyさん
2007/03/02(金) 19:28:28ID:???高木さんのこのエントリーでも読んで少し勉強してきな。
http://takagi-hiromitsu.jp/diary/20051227.html
0687nobodyさん
2007/03/02(金) 19:31:09ID:???0689nobodyさん
2007/03/02(金) 19:35:51ID:???コーディングスタイルなんて人それぞれだろ?
0693nobodyさん
2007/03/02(金) 19:54:21ID:g1P/5yv2ご存知の方いませんでしょうか?
行列計算に関しての情報が全然見つからなくて困っています。
下らない質問ですいません…。
0696683
2007/03/02(金) 20:01:52ID:???すみません、ちょっとよくわかりません。
私が考えていたのはif文を使って、
数字が同じなら / で区切り、数字が変わったら )+( で区切る様にする
という感じですが、その数字の判別をどうやってやるのかよく分からなくて、、、
0697nobodyさん
2007/03/02(金) 20:05:58ID:???はい、PHPのマニュアルから探しはじめて、PEAR、PECL、
検索エンジンでも探したのですが見付かりませんでした…。
ごめんなさい。
>>695
クロス集計したデータを要約する統計的分析です。
いろんな項目を集約して、分類できそな値を見つけるのが目的です。
ttp://www5.ocn.ne.jp/~shinya91/csm/331csm_multi.html
0699nobodyさん
2007/03/02(金) 20:07:01ID:???0700683
2007/03/02(金) 20:09:53ID:???そうです。
1-A,2-B,2-X,3-AB…
という感じで「半角数字=文字」の束がコンマ区切りで格納されています。
0701nobodyさん
2007/03/02(金) 20:12:29ID:???0703683
2007/03/02(金) 20:17:38ID:???1=A,2=B…イコールの誤りですすみません
explodeすると
1,A,2,B,2,Cという感じにバラバラになってしまうので余計やりにくい様な
0704nobodyさん
2007/03/02(金) 20:20:07ID:???0705nobodyさん
2007/03/02(金) 20:20:40ID:???0706683
2007/03/02(金) 20:32:41ID:???0707nobodyさん
2007/03/02(金) 20:33:07ID:???for ($i = 0; $i < count($arr); $i += 2) {
$test.push({key: MODEL[$arr[$i]], val: $arr[$i+1]});
}
すべてカンマ区切りならこうすれば結構やりやすいんじゃないかと。
0708nobodyさん
2007/03/02(金) 20:36:45ID:???pearやpeclも調べてないんだったら厳しいね。(っていうか調べてたんなら最初から書いてね)
やり方分かってるなら自分でモジュール作ってみたら?
他の人も助かるかもしれないし。
0710683
2007/03/02(金) 20:44:33ID:???その数字が変われば次の処理にいく、という感じにしたいと思います。
0712nobodyさん
2007/03/02(金) 21:17:48ID:g1P/5yv2書き忘れてすみませんでした。
ライブラリは無さそうですか…。残念ですが、自分で作ることにします。
PEARとPECLに登録されるようがんばります。
わざわざレスありがとうございました。
0713nobodyさん
2007/03/02(金) 22:43:15ID:iNFjaYc/PHP側が文字コードをMySQLの設定文字コードに合わせないといけないのでしょうか?
PHPのinernal encodingをEUC-JP、MySQLの設定文字コードをSJISにすると、
正常に検索が行えませんでした。
(LIKE %日本語% を発行すると、一部しか拾って来ませんでした。)
0715nobodyさん
2007/03/02(金) 22:55:57ID:???0717713
2007/03/02(金) 23:13:02ID:iNFjaYc/>>714 さん
レンタルサーバで、MySQLの設定をいじることができません。
>>715 さん
PHPの内部エンコーディングをMySQLの設定文字コードに合わせたくないという事です。
>>716 さん
追加したデータは、EUC-JPで入っています。
INSERT時も内部エンコーディングEUC-JPのPGを使っているので、
データ自体、EUC-JPになっています。
ですので、検索時だけ対処しても駄目だと思います。
0720713=717
2007/03/02(金) 23:31:13ID:iNFjaYc/馬鹿です。
本番環境のエンコーディングが今まで分からなくて・・・
>>719 さん
MySQL 4.0だから、その手は使えません。
それで、最初の質問で「MySQL 4.0を・・・」と書きました。
皆さんは、どうされていたのか、知りたいと思いまして。
やはり、SQL投げる度に(INSERTもSELECTも)、
文字コードの変換を書く必要がありそうですね。
データ量が10万件規模なので、面倒だと思いましたが、
仕方ないようですね。
0721nobodyさん
2007/03/02(金) 23:37:28ID:???これはもうPHP全然関係なくて、さすがにMYSQL内部でがエンコードが違うと
likeで部分一致を試みようと思ってもうまく処理できないんだよ。
諦めてデータベースの中身を1度入れ替えるべし。
0722713=717
2007/03/02(金) 23:40:16ID:iNFjaYc/失礼しました。
SET NAMESではないですね。
ただ、それを実行すると、
#1115 - Unknown character set: 'ujis'
となります。
SHOW VARIABLES LIKE 'character%'
とすると、
latin1 big5 czech euc_kr gb2312 gbk latin1_de sjis tis620 ujis dec8 dos german1 hp8 koi8_ru latin2 swe7 usa7 cp1251 danish hebrew win1251 estonia hungarian koi8_ukr win1251ukr greek win1250 croat cp1257 latin5
となるのですが・・・
0724713=720=722
2007/03/02(金) 23:44:26ID:iNFjaYc/>>721 さん
なるほど。エンコードが違うと、部分一致がうまく処理されないんですね。
>>723 さん
何か上手いやり方があるかと思いましたが、地道にするしかありませんね。
皆さんのおかげで、無事、解決しました。
mb_convert_encodingで文字コード変換します。
ありがとうございました。
0725nobodyさん
2007/03/03(土) 03:03:11ID:fjJSaYh6ZendFrameworkの板から流れてきたんですけど、どうやら問題はPDO関係っぽいので
こちらにおじゃまします。
postgresqlでPDO使ってる人いますか?
接続は
$db=new PDO('pgsql:dbname=testdb user=user');
であってますよね?これでつなげるし、クエリーも出せて結果も受け取れるんですけど
ZendFrameworkを使って接続すると、apache(httpdのuser)君にはそんな権限はありませんって
エラーが出て、どうやら、ユーザーを認識していない様子。
で、ソースをいじって、PDO接続するところを上記のように(ZF使う前からずっとこれでつなげてました)
変えたら、接続できて、その他のメソッドも動きました。
あちらでも指摘されたんですがPHPのマニュアルには
new PDO('mysql:host=localhost;dbname=test', $user, $pass);
と出てるんですよね。でも、このまま頭をpgsqlに変えると、apache君〜のエラーが出ます。
ちなみに、httpdの実行ユーザーをDBの接続ユーザーと同じ名前にすると接続できたりします。
ttp://www.php.net/manual/ja/ref.pdo-pgsql.connection.php
ここを見ると、postgresqlは違うような表記になってますけど、
これって、つなぐDBによって表記が変わるようなしろもんじゃないですよね?
長文失礼しました。
ご指摘ありましたらお願いします。
0726nobodyさん
2007/03/03(土) 03:06:51ID:???変わる代物です。例えば
MySQL : mysql:host=[HostName];dbname=[DatabaseName];charset=[MySQL Charset]
PostgreSQL : pgsql:host=[HostName] port=[PortNumber] dbname=[DatabaseName] user=[UserName] password=[Password]
SQLite3 : sqlite:[DatabaseFileName]
SQLite2 : sqlite2:[DatabaseFileName]
0727725
2007/03/03(土) 03:08:17ID:???PHP5.2.1
postgreSQL8.2.3
apache2.2.2
です。
エラーは
SQLSTATE[08006] [7] FATAL: role "apache" does not exist
です。(権限はないじゃなくて、いませんでした。勘違いですOTZ)
0728nobodyさん
2007/03/03(土) 03:13:14ID:fjJSaYh6即レスサンクス
やっぱりdbによって違うんですか。
ってことは、ZendFrameworkのバグでしょうか?
あっちでも書いたんですけど^^;
いくら試用段階とはいえこんなコアな部分にバグあって
誰も気づかないはずないですよね?
もうちょっといろいろ試してみます。
引き続き何かありましたらレスお願いします。
0729nobodyさん
2007/03/03(土) 04:38:49ID:???必要な情報がDB毎に異なる部分だからこの辺は
統一されている必要性があるとも考えてもいないんじゃない?
バグでなく「仕様」かと。
0730nobodyさん
2007/03/03(土) 05:35:56ID:???DSNの指定はDBごとに異なるものだけど、userとpassについては
第二引数、第三引数に指定することで各種DB共通に処理できる。
$db=new PDO("pgsql:dbname=testdb", "user");
で動かんか?
0731nobodyさん
2007/03/03(土) 07:31:57ID:???<?php
$array = array( "1=A", "1=B", "2=A", "2=K", "2=D", "3=SS", "3=AX", "4=A" );
$str = "";
$i = 0;
// sort($array);
foreach ($array as $val) {
$num = (int)$val;
if ($num == $i) $str .= " / " . $val;
elseif ($num > $i) {
if ($i == 0) $str .= "(" . $val;
else $str .= ") + (" . $val;
$i = $num;
}
else exit("Error");
}
$str .= ")";
echo $str;
?>
0732nobodyさん
2007/03/03(土) 07:47:18ID:???だったらだめじゃん
0733nobodyさん
2007/03/03(土) 08:19:04ID:???$m=(int)$m;
$n=(int)$n;
if ($m == $n){
return 0;
}else if ($m > $n){
return 1;
}else{
return -1;
}
}
sort($array,'sortFunc')
0734nobodyさん
2007/03/03(土) 08:23:48ID:???sort($array,'sortFunc') →usort($array,'sortFunc')
0735nobodyさん
2007/03/03(土) 08:24:37ID:???0736731
2007/03/03(土) 08:24:45ID:???数字はあらかじめソートして配列が作ってあるのが前提です
並べ替えてよいのなら
sort($array, SORT_NUMERIC );
にしてください
0737nobodyさん
2007/03/03(土) 08:29:42ID:???どうしてもださくなるわな
0739nobodyさん
2007/03/03(土) 10:53:33ID:???0740nobodyさん
2007/03/03(土) 11:18:40ID:???>なんか沸いたぞw
この場合の「わいた」は「沸いた」ではなく「湧いた」ではないでしょうか。
ご確認のうえ、訂正をお願いします。
0741nobodyさん
2007/03/03(土) 11:26:05ID:???function hogeHoge($name,$type,$format);
出力側は、hogeHoge("名無し","テキスト","");
みたいな感じですよね?なんか他所で
function hogeHoge($name,$type[,$format]);
こういう書き方を見たのですが、こういう書き方って出来るんですか?
0742nobodyさん
2007/03/03(土) 11:29:27ID:???0744nobodyさん
2007/03/03(土) 11:33:08ID:???Parse error: syntax error, unexpected '[', expecting ')' in C:\home\php\test.php on line 3
人に試させるなよ
0745nobodyさん
2007/03/03(土) 11:33:15ID:???0747741
2007/03/03(土) 11:43:10ID:???マニュアルです。省略可能という事は、
hogeHoge("名無し","テキスト");
こう書けるって事ですか?ただこれをすると
Missing argument 4 for hogeHoge(), というようなエラーが出ました
0748nobodyさん
2007/03/03(土) 11:51:03ID:???0749nobodyさん
2007/03/03(土) 11:51:13ID:???関数定義するとき省略可能なようにする
function hogeHoge ( $name, $type, $format = "")
{
echo $name;
echo $type;
if ($format) echo $format;
}
0751nobodyさん
2007/03/03(土) 12:35:53ID:Z8h+tc0/下記のような方法では、無理でしょうし。
* hoge.php
require_once 'settei.php';
Class Hoge
{
function sample(person){
echo $name[person]."さんです。";
}
}
* settei.php
$name = array(1=>"taro",2=>"jiro",3=>"saburo");
0752nobodyさん
2007/03/03(土) 12:46:09ID:???とクラスが使えない俺が言ってみる。
0753nobodyさん
2007/03/03(土) 13:16:08ID:???static $name = array(1=>"taro",2=>"jiro",3=>"saburo");
にして
settei::name[$person]
でアクセス
PHP4なら
define( "name", array(1=>"taro",2=>"jiro",3=>"saburo") );
にして
name[$person]
でアクセス
検証はしてないのでたぶん
0754nobodyさん
2007/03/03(土) 13:31:19ID:???htmlspecialcharsでも悪くはない。
高木の言うことを鵜呑みにするのは初心者ですか?
0755nobodyさん
2007/03/03(土) 13:33:41ID:2CUy4PID0756725:728
2007/03/03(土) 13:40:25ID:fjJSaYh6>>730
レスありがとうございます
すいません。わかりました。
passwordを省略すると、そのエラーが出るようです。
しかもZendFramework版のほうで指摘されてたのに見逃してたみたいです。
まじでごめんなさいOTZ
いいわけ:でも、エラーの出方が紛らわしいと思いません?^^;
ありがとうございました。
0757nobodyさん
2007/03/03(土) 13:57:33ID:2CUy4PID余計なものまで取得したり、配列がぐちゃぐちゃになって困ってます。
どこを手直ししたらよろしいのかご教授お願いいたします。
【取得したい内容】
apache_child_terminate ? このリクエストの後にApacheプロセスを終了する
・
・
virtual ? Apache サブリクエストを実行する
【ここまで】
(計14行文)
<?php
$url = "http://www.php.net/manual/ja/ref.apache.php";
$subject = file_get_contents($url);
$subject = mb_convert_encoding($subject,"EUC-JP","auto");
$patten = "[(<dt>)+(.*)(</a></span>)+]";
preg_match_all($patten, $subject, $set);
echo"<pre>";
print_r($set);
echo"</pre>";
?>
0758nobodyさん
2007/03/03(土) 16:18:07ID:cG1UPfnL300行ほど並んだCSVファイルから、ランダムで1行だけを取り出し、
その列のデータを配列$arrayに入れる方法を教えて下さい。
0760nobodyさん
2007/03/03(土) 16:24:39ID:???0761nobodyさん
2007/03/03(土) 16:25:32ID:???srand((float) microtime() * 10000000);
$array = array_rand($file);
0762nobodyさん
2007/03/03(土) 16:26:28ID:cG1UPfnL$file = "data.csv";
$file = @fopen($file);
$array = array($file);
$close;
でストップしてます
0765nobodyさん
2007/03/03(土) 16:32:35ID:???$file = "data.csv";
srand((float) microtime() * 10000000);
$array = array_rand($file);
とした時、$arrayには行数が入りますよね?
0767nobodyさん
2007/03/03(土) 16:36:11ID:???HTML化される前のSGMLを使った方がいいんじゃまいか?
<refentry id="function.apache-child-terminate">
<refnamediv>
<refname>apache_child_terminate</refname>
<refpurpose>このリクエストの後にApacheプロセスを終了する</refpurpose>
てな感じにXMLの形式で書かれている。
元ネタはCVSで取得するしか無いが、まぁ難しいもんでもない。
今のように毎回本家に負荷を掛けるより、一回チェックアウトしてローカルファイルとしてやったほうがいいべ。
cvs -d :pserver:[email protected]:/repository checkout -d phpdoc-ja/reference
0768nobodyさん
2007/03/03(土) 16:38:47ID:???理解しました。
$file[$array]で出力するとうまく一行だけ取り出せました。
ありがとうございました。
0769nobodyさん
2007/03/03(土) 16:51:04ID:2CUy4PIDしかし全部14行取得できません。悩みます。
>>767さんのおっしゃること通りですが、私には勉強不足な点がございますので調べてみます。
0770nobodyさん
2007/03/03(土) 16:53:18ID:2CUy4PIDArray([0] => Array
(
[0] => apache_child_terminate ? このリクエストの後にApacheプロセスを終了する
[1] => apache_get_modules ? ロードされた Apache モジュールのリストを取得する
[2] => apache_get_version ? Apache のバージョンを取得する
[3] => apache_getenv ? Apache の subprocess_env 変数を取得する
[4] => apache_note ? Apacheリクエスト記号(note)を取得/設定する
[5] => apache_request_headers ? HTTPリクエストヘッダを全て取得する
[6] => apache_reset_timeout ? Apache の書き込みタイマーをリセットする
[7] => apache_setenv ? Apacheサブプロセスの環境変数を設定する
[8] => ascii2ebcdic ? ASCIIからEBCDICに文字列を変換する
[9] => ebcdic2ascii ? EBCDICからASCIIに文字列を変換する
[10] => getallheaders ? 全てのHTTPリクエストヘッダを取得する
[11] => virtual ? Apache サブリクエストを実行する
)
[1] => Array
(
[0] => apache_child_terminate ? このリクエストの後にApacheプロセスを終了する
[1] => apache_get_modules ? ロードされた Apache モジュールのリストを取得する
[2] => apache_get_version ? Apache のバージョンを取得する
[3] => apache_getenv ? Apache の subprocess_env 変数を取得する
[4] => apache_note ? Apacheリクエスト記号(note)を取得/設定する
[5] => apache_request_headers ? HTTPリクエストヘッダを全て取得する
[6] => apache_reset_timeout ? Apache の書き込みタイマーをリセットする
[7] => apache_setenv ? Apacheサブプロセスの環境変数を設定する
[8] => ascii2ebcdic ? ASCIIからEBCDICに文字列を変換する
[9] => ebcdic2ascii ? EBCDICからASCIIに文字列を変換する
[10] => getallheaders ? 全てのHTTPリクエストヘッダを取得する
[11] => virtual ? Apache サブリクエストを実行する
)
)
0771nobodyさん
2007/03/03(土) 17:03:44ID:???0772nobodyさん
2007/03/03(土) 17:25:28ID:???アドバイスいただきありがとうございます。
0773nobodyさん
2007/03/03(土) 19:19:38ID:Z8h+tc0/のってませんでした。可能でしたら、お教え下さい。。
file_get_contents("http://www.yahoo.comcomcom") <= 404エラー
rescue
exit
みたいな。rubyでいう。
0774nobodyさん
2007/03/03(土) 19:22:21ID:???失敗した場合、file_get_contents() は FALSE を返します。
0775nobodyさん
2007/03/03(土) 19:24:16ID:???print "大成功!";
}
0776773
2007/03/03(土) 19:34:42ID:Z8h+tc0/0777773
2007/03/03(土) 20:11:37ID:Z8h+tc0/"http://www.yahoo.comcomcom"): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
ためしてみたんですが、WARGINGは出ますねぇ。。
0779nobodyさん
2007/03/03(土) 20:27:56ID:???とにかく自分でソース確認しましょうね。
0780nobodyさん
2007/03/04(日) 00:54:24ID:/sugyBqZmy.cnfの[mysqld] に
skip-character-set-client-handshake
を貼り付ければいいわけですよね?
うん〜
0781nobodyさん
2007/03/04(日) 02:01:20ID:74jdPdk8ブロックが閉じる時に変数は破棄されますか?
if(***) {
$hoge;
}
{
$foo;
}
function Bar() {
$bar;
}
0782nobodyさん
2007/03/04(日) 02:04:10ID:???0783nobodyさん
2007/03/04(日) 02:55:29ID:j6Pq8T7o例えば、クラスAは、クラスBからはnewできるが、クラスCからはnewできない、などです。
packageやfriendクラスの概念が無いので正攻法では無理だと思うのですが、
何か擬似的な方法がありましたらご教授下さい。
0784nobodyさん
2007/03/04(日) 03:05:39ID:???関数から抜け出したい(関数内に書かれているその後の処理をしたくない)のですが、
どうやって任意のポイントで関数から抜け出したらいいでしょうか?
breakとかじゃないし・・・
exitだとプログラム全体が終わっちゃうし・・・
■ このスレッドは過去ログ倉庫に格納されています