【PHP】下らねぇ質問はここに書き込みやがれ 54
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん
2007/09/09(日) 12:42:57ID:64tYOx8RPHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 53
http://pc11.2ch.net/test/read.cgi/php/1188047468/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0813nobodyさん
2007/09/24(月) 14:45:48ID:HSprOhmPPHPの記述・HTMLの表示はEUC-JPで、txtファイルはShift-JISです。
$data = file_get_contents("test.txt");
$data = mb_convert_encoding($data,"EUC-JP","auto");
echo $data;
としてみたのですが、
p"・・・・畿4ウチu"ょ"・・A介潤・逐・縲・・楳氈E・・
とこんな感じになってしまいます。
test.txtをEUC-JPで作ると問題なく表示されます。
どうすれば解決できるでしょうか。よろしくお願いします
0814nobodyさん
2007/09/24(月) 15:15:31ID:???0815nobodyさん
2007/09/24(月) 15:38:02ID:???なんでだろ。
PHPのソース見れば分かるんだろうけど。
0816813
2007/09/24(月) 15:47:27ID:/07n7WU2ありがとうございます、ちゃんと表示されました。
autoは万能じゃないて事ですかね。
0818nobodyさん
2007/09/24(月) 16:30:12ID:???これ、本当に動いてますか? 怖くて手を着けたくないっす。
>>812
function valsclear($vals){
if(is_array($vals)){
foreach(array_keys($vals) as $atom){
if(is_array($vals[$atom])){
valsclear(&$vals[$atom]);
} else {
$vals[$atom] = '';
}
}
} else {
$vals = '';
}
}
とりあえず 2×2×5 の多次元配列までやってみたけど、どうだろうか
0819nobodyさん
2007/09/24(月) 16:41:55ID:9opMSOGnプロパティにアクセスするにはどうすればよいでしょうか?
0821nobodyさん
2007/09/24(月) 17:09:15ID:9opMSOGn0822nobodyさん
2007/09/24(月) 19:36:00ID:???どうしたってセレクトのアイテム数分ループさせて比較しなきゃいけないんだから、それ以上工数は減らせないでしょう。
ただ見た目的にシンプルかつ柔軟な関数にするだけでいいならこんなんでいかかでしょうか?
function selectForm($select_name, $option_values, $selected_id='')
{
$strbuf = "<select id=\"{$select_name}\" name=\"{$select_name}\">";
foreach ($option_values as $id => $val) {
$selected = ($id==$selected_id) ? ' selected="selected"' : '';
$strbuf.= "<option value=\"{$id}\"{$selected}>{$val}</option>\";
}
return $strbuf;
}
$arrbuf = array(0=>"あああ", 1=>"いいい", 2=>"ううう");
echo selectForm('test', $arrbuf, $_POST['test']);
($_POST['test']の中身が値ではなくそれに対応するidが入っているという前提になってます)
0824nobodyさん
2007/09/24(月) 19:50:39ID:???Javascript前提なら、PHPでは比較しないでループで書き出すのみにして
onloadでJavascriptに比較させてもいいんだけどね。
普通はやらんねw
0825nobodyさん
2007/09/24(月) 19:54:06ID:???基本的には811のやり方で、後は些細な書き方の差になると思うけど、
例えばif文を使わない版。ただし、valueの種類に "" を含むと誤動作する。
$name = "test";
$values = array(0=>"あああ", 1=>"いいい", 2=>"ううう");
$select = array($_POST[$name] => ' selected="selected"');
$html = "<select name=\"$name\">\n";
foreach($values as $id => $val) {
$html .= "<option value=\"$id\"{$select[$id]}>$val</option>\n";
}
$html .= "</select>\n";
echo $html;
0826nobodyさん
2007/09/24(月) 20:17:55ID:???空文字valueがある場合でも
$select = array($_POST[$name] => ' selected="selected"');
を
$select = (isset($_POST[$name]))? array($_POST[$name] => ' selected="selected"'): array();
にするだけかと。
0827nobodyさん
2007/09/24(月) 22:06:16ID:???0828nobodyさん
2007/09/24(月) 22:43:12ID:JlRJpJ4Mほかのクラスで上記クラスをインスタンス化して保持します。
このインスタンス変数をinstanceとした場合、DBの接続を切るには、
instance -> __destruct() と記述すればいいのでしょうか?
0829nobodyさん
2007/09/24(月) 23:11:07ID:???デストラクタはインスタンスが破棄される時に自動実行される。
$instance->__destruct()とした場合、デストラクタは実行されるが、インスタンスは破棄されておらず、
インスタンスが破棄される時(関数を抜ける時や実行終了時)にもデストラクタが二重実行されてしまう。
明示的に変数を破棄する場合はunset($instance)を使う。
但し、unset($this)といった様にインスタンスが自身を破棄することは出来ないので注意されたし。
0830nobodyさん
2007/09/24(月) 23:57:32ID:JlRJpJ4Mどうもありがとうございました。
Smartyを使ってMVCに基づいたプログラミングをしてます。
Controlはポストデータ受け、Modelのインスタンス生成、戻り値(ResultSet)のsmarty->assignセット、Viewであるテンプレートコール。
ModelはSQLの実行など。
Smartyクラスを継承したサブクラスを作り、そのconstructでMySQLやDBへの接続をしてます。
DBの切断をどこでやるか迷っていたのです。
いろいろあると思いますがなかなか設計が・・・
0831nobodyさん
2007/09/25(火) 00:00:45ID:8D5Ec5Bn0832nobodyさん
2007/09/25(火) 00:10:05ID:ibGZ3o0m0833nobodyさん
2007/09/25(火) 00:21:07ID:???Smartyの派生クラスでDB接続って、MVCがごっちゃになりそうなもんだが。
0834nobodyさん
2007/09/25(火) 00:45:59ID:ibGZ3o0mそうですね。
DB接続用のクラスを作ってSmartyクラスの派生とは分離させてみます。
ありがとうございました。
0835nobodyさん
2007/09/25(火) 14:56:33ID:RlJd1MSD↑
こういうことやりたいのですが
これだと$hoge関係なしにそのままインクルードされてしまいます
実現方法を教えてください
0837nobodyさん
2007/09/25(火) 15:07:19ID:RlJd1MSDありがとうございます。わかりました
GETのやりかたをGOOGLEで検索してみます
0838nobodyさん
2007/09/25(火) 15:12:10ID:???多分でしかないけど
ob_start();
include("hoge/hoge.php");
$obj = ob_get_clean();
0839nobodyさん
2007/09/25(火) 15:20:55ID:???return <<<EOF
なんたらかんたら
EOF;
--- 読み元.php ---
if ($contents = @include('hoge.php')) {
echo $contents;
} else {
echo 'hoge.phpがねーぞ';
}
0840nobodyさん
2007/09/25(火) 15:33:42ID:RlJd1MSDありがとうございます できました
>>839
ありがとうございます コードを保存しました こんどやってみますね
0841nobodyさん
2007/09/25(火) 16:25:55ID:QDhH7pTbログインしてカレント移動までは正常にいくのですいが、ファイルのアップロードがうまくいきません。
まったくうまくいかないのかというとそうではなくて、B鯖に’HOGE.txt’までは作られるんですが、
’hoge.txt’の内容はまったくなく、真っ白の状態です。
プログラムを実行すると、かなり時間がかかったあと、ファイルのアップロードに失敗したといわれます。
-------------------------------------------------------------------------------------
<?php
$ftp_server = "www.example.jp";
$ftp_user = "hoge";
$ftp_pass = "passwd";
$conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server");
if (@ftp_login($conn_id, $ftp_user, $ftp_pass)) {
echo "Connected as $ftp_user@$ftp_server\n";
} else {
echo "Couldn't connect as $ftp_user\n";
}
ftp_chdir($conn_id, "public_html");
$file = 'hoge.txt';
$remote_file = 'HOGE.txt';
if (ftp_put($conn_id, $remote_file, $file, FTP_ASCII)) {
echo "successfully uploaded $file\n";
} else {
echo "There was a problem while uploading $file\n";
}
ftp_close($conn_id);
?>
-------------------------------------------------------------------------------------
どこがいけないのでしょうか?
0842nobodyさん
2007/09/25(火) 16:25:59ID:???開始文字列と終了文字列は別、取り出したいものは一ヶ所という前提です。
$src = "ここはいらないstartここがいるendここもいらない";
$s = "start";$e = "end";
$ary = explode($s, $src);
$tmp = $ary[1];
$ary = explode($e, $tmp);
$tmp = $ary[0];
echo $tmp;
なんかもっと効率のいい書き方はないでしょうか?
0843nobodyさん
2007/09/25(火) 16:33:00ID:???0844nobodyさん
2007/09/25(火) 18:07:39ID:Bc2ZA9JHこれさ元からあるフィルタ以外に拡張したい場合、
FILTER_CALLBACKしか無い感じですか?
新しいフィルタ定義して呼び出すとか無理っぽい?
それでもfilter_listやfilter_idが存在するのは
ソースコード書き換えてPHPからコンパイルし直せつうこと?
0845nobodyさん
2007/09/25(火) 18:14:45ID:9q66wLmdサイトを教えてください。
0846nobodyさん
2007/09/25(火) 18:26:04ID:???filter_id は ext/filter/filter_private.h にあるC的にスタティックなID番号を示すぽいので、
スクリプト実行時に動的に増やすのはcallback以外ムリじゃないかな。
0847nobodyさん
2007/09/25(火) 19:09:20ID:???number_format($str,2)だと「100」「50」となってしまいます。
何か方法無い物でしょうか?
出力はSmartyを通してます
0851841
2007/09/25(火) 20:34:09ID:xfKDGXzl追加情報
A鯖からftpコマンドでは正常にやり取りできます。
会社のTurboLinux10サーバーからA鯖である自宅のCentOS5へ向けて
さっきのスクリプトを走らせると正常に処理が完了します。
A鯖から外部へ向けて走らせるとまったくだめです。
会社のTL10S、ローカルWindowsのFTP鯖、ジオシティーズすべてだめでした。
シェルからFTPコマンドではすべて正常に処理できました。
phpinfoで再度確認してみましたが ftp enable となっており使える設定のはずですが。。。
Apache2.x自体 yum にてインストールしました。
スクリプトではなくA鯖に問題があるのでしょうか?
0852841
2007/09/25(火) 20:41:52ID:xfKDGXzl失礼しました、自己解決しました。
A鯖のiptablesの設定ミスをしていました。
ありがとうございました。
0853nobodyさん
2007/09/25(火) 20:52:40ID:???CGIのように設定する必要はないのでしょうか。
0854853
2007/09/25(火) 21:00:48ID:???0856nobodyさん
2007/09/25(火) 21:38:42ID:Wp8RlZHhある一定の作業だけアセンブリで書きたいのですが。
0857nobodyさん
2007/09/25(火) 21:40:17ID:???0858nobodyさん
2007/09/25(火) 21:46:19ID:???オレから言わせれば、欺瞞でありアイデンティティーの欠如に他ならない。
0859nobodyさん
2007/09/25(火) 21:57:23ID:???linuxならバッククォートで囲む。
windowsはやったことないからしらん。
インラインで書きたいってのならミリ
0860nobodyさん
2007/09/25(火) 22:07:27ID:259tGTbD環境:WindowsXP SP2+Apache2+PHP5+MySQL5
PHPからmysql_query("SELECT HogeHoge From Table WHERE ・・・");を
実行して結果をテキストファイルに書き込む処理をしています。
ブラウザでPHPファイルを読み込んだ一発目は成功するのですが、二度目
(つまり、F5によるリフレッシュ、自身へのリンクをクリックして再読み込みした場合など)では
ファイルに何も出力されておらず途方にくれています。
MySQLの方でもエラーログに何にも記載なし、Apacheのほうもエラーなし。
アクセスログにも怪しげなものなし。
そもそも、なんで同じコードなのに1回目は成功して二回目は失敗するの?
(推測したこと)
・1回目の処理でファイルが排他モードになってて2度目のときにロックがかかってて処理ができない。
→レコード以外にもfputs($Fhandle,"書き込めるよ");などとやったら「書き込めるよ」はちゃんと出力される。
ってかそもそも、ちゃんとfclose実行してるし。。。
・よくわからんけどMySQLが同一ユーザーからの処理を受け付けないようになってる?
同じID,Passwordで検証しているからこれが有力と思いきや
→ID,Passを1度目と2度目で分けても結果は変わらず。
・もしかして発行するSQLCommandを間違ってるとかいうDQNなオチ?
→QueryBrowserで確認するがちゃんと表示される。
さぁ本当にお手上げだ。
誰か心優しい方、ヒントだけでもぜんぜんOKなんで俺を助けてくれ。
0861nobodyさん
2007/09/25(火) 22:10:13ID:???0862860
2007/09/25(火) 22:14:56ID:259tGTbD説明下手くそですんません。
失敗しているのはおそらくここっす。
$rs=Func_Query("SELECT A,B FROM HOGE_MASTER WHERE A='" . $_GET['key'] . "';");
while($row = mysql_fetch_array($rs)) {
fputs($fhandle,$row[0] . "," . $row[1] . "\n");
}
0863nobodyさん
2007/09/25(火) 22:16:21ID:???0864860
2007/09/25(火) 22:19:26ID:259tGTbD何にも書かれていないのです(涙)
ちなみにファイルはw+でオープンしています。
(つまりファイルオープンはエラーじゃないと頭悪いなりに考えをめぐらせて見ました)
ということは$rsに何にも入っていないか、fputsが失敗しているかのどっちかかなと。
0865nobodyさん
2007/09/25(火) 22:21:14ID:???0866860
2007/09/25(火) 22:25:38ID:259tGTbD一応ここには決まったStringしかプログラムが返さないようになっているので平気かと。
しかも、1回目はうまくいくんですよ〜。
ヒントだけでもいいんでお願いします〜〜。
0867nobodyさん
2007/09/25(火) 22:29:41ID:???0868nobodyさん
2007/09/25(火) 22:29:51ID:???0869860
2007/09/25(火) 22:31:47ID:259tGTbD今はLocalでテストなんで平気ですけど、最終的にはかならず切り分けしてチェックを通ったものだけを
実行するようにいたします。
0870nobodyさん
2007/09/25(火) 22:39:05ID:???リロった時に入ってないとかってオチかもしれんよ
0871860
2007/09/25(火) 22:48:49ID:259tGTbD直で値、書き込んだらなぜか動作しないっす。
ただし、同じものをコピペしてQueryBrowserで実行するとなぜかきっちり実行される。
これってどういうことなんですかね。
本当にアホな質問なんでしょうがよろしくお願いします。。。
0873860
2007/09/25(火) 23:05:27ID:259tGTbD俺もFunc_Queryってなんだろうって思って確認したら
function Func_Query($strSQL){
$rs=mysql_query($strSQL);
return $rs;
}
って書いてありますたorz
ちなみに今回はmysql_queryでやってもまったく同じ結果ですね。
もしかして日本語を代入してるのがまずいんでしょうかね?
0875856
2007/09/25(火) 23:12:14ID:Wp8RlZHhレスありがとうございます。
仰るとおりCの様にインラインで書きたかったのですが無理なのですね。
参考になりました。どうもありがとうございます。
0876860
2007/09/25(火) 23:20:06ID:259tGTbD先ほどの$_GET['key']の中をsampleみたいに半角英数字のみで構成させると動作する場合が多いです。
(それでもリロードしたあとに動作しないことが多々あり原因は不明)
現在SJISで書かれたウェブの中にあるSelectOptionsの中身に
AjaxでPHP(EUC)がUTF8で書き込んだファイルの内容を一行ずつ表示させて、それをクリックしたら
またその内容をPHPで受け取ってさらにファイルを生成するというむちゃくちゃな仕様に
なっています。
引き継いだときにはこんな状態だし、私は完全に畑違いなのに毎日画面とにらめっこで
泣きそうです。
とりあえず、糸口だけでもつかめて本当に参考になりました。
お答えいただいた方は1人?2人??よくわかりませんが、本当にありがとうございます。
いったんここで質問をCloseさせていただきます。
0877nobodyさん
2007/09/25(火) 23:25:24ID:???例えば、蛍光灯と裸電球と比べると、蛍光灯は同じ電力量で明るいと思います。
これは、蛍光灯が熱エネルギーも全て光エネルギーに変換しているためですが、
どうしてCPUも熱エネルギーを計算処理にリソースを割かないのでしょうか?
CPUから熱エネルギーを生成している意義がよくわからないです。
0878nobodyさん
2007/09/25(火) 23:29:48ID:???0884nobodyさん
2007/09/26(水) 06:06:53ID:VlwtrPtdPHPで他の言語が使える?ってこと?
初心者丸出しですみませんorz
0885nobodyさん
2007/09/26(水) 09:23:15ID:???バッククォートで囲む=外部コマンドとして実行する。
その場でアセンブルして実行ファイルを生成して、即実行しちゃえ、ってことでしょ。
他の言語が使えることは使えるけど、むっちゃ遅いのであんまり使い道は無い。
すでに開発済みのPerlスクリプトに一部処理を任せる、みたいな目的なら可。
0886nobodyさん
2007/09/26(水) 09:43:39ID:???0887nobodyさん
2007/09/26(水) 10:46:54ID:QWy2Zkw00890nobodyさん
2007/09/26(水) 13:16:02ID:???0891nobodyさん
2007/09/26(水) 16:38:40ID:4b9p4uCs<?php
echo "a";
?>
というhoge.phpをau携帯(W31SA)から見たら
「リクエストされたページは表示できません。」
と返されたのだが、何が問題でしょう??
0892nobodyさん
2007/09/26(水) 16:48:20ID:???0895nobodyさん
2007/09/26(水) 17:33:42ID:Mqjw2ZGS基礎の基礎の基礎だと、テキストに「a」とだけ書けば表示されるんだけど?
htmlになってしかも携帯だから表示しないだけで。
0899nobodyさん
2007/09/26(水) 17:43:56ID:???特にauはHTML以外でもページ構成できるわけで。
0904nobodyさん
2007/09/26(水) 17:55:30ID:???>>891をつくってやってみたらドコモは表示できたw
こういうのって質問する前に自分で試したほうが早いと思うんだけどねー
>>902
あうはWML(笑)だよなー
0905nobodyさん
2007/09/26(水) 18:03:11ID:???方法1: PHP拡張モジュールを作る http://www.php.net/manual/ja/function.dl.php
方法2: Windows環境のPHP5でCOMを利用する http://www.php.net/manual/ja/ref.com.php
0906nobodyさん
2007/09/26(水) 18:17:00ID:bO9sGA13MDB2さわってみたけど、資料やエラー報告が少なくて見送ろうと思うんだけど・・・
0907nobodyさん
2007/09/26(水) 18:23:28ID:???なかったらコードが乗ってるサイトしりませんか?
自分でちょっとがんばってみたんですが・・・
バカなんで・・・無理でした・・
0908nobodyさん
2007/09/26(水) 18:27:02ID:???>>906
Pear
PDO
0911906
2007/09/26(水) 18:44:11ID:bO9sGA13ありがとうございます。
PDOとPEAR::DBの違いはなんですか?
0912nobodyさん
2007/09/26(水) 18:48:36ID:???レス数が900を超えています。1000を超えると表示できなくなるよ。