【PHP】下らねぇ質問はここに書き込みやがれ 54
■ このスレッドは過去ログ倉庫に格納されています
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カテゴリ)の各スレで
0758754
2007/09/22(土) 23:17:50ID:JPmP1x2o↑
読み方しりません><
0759nobodyさん
2007/09/22(土) 23:22:18ID:???0760nobodyさん
2007/09/22(土) 23:43:27ID:???0762nobodyさん
2007/09/23(日) 10:48:42ID:8QFSYDARclass A
{
public $a = 'hoge';
}
$b = ○○○; // Aの$aを取得したい
0763nobodyさん
2007/09/23(日) 12:09:09ID:???publicって書いてるって事はphp5として考えるけど
5ならconstにするかメソッド作ってカプセル化すればいいのに
0764762
2007/09/23(日) 12:13:07ID:8QFSYDARご回答ありがとうございます。
Aが変数(AだったりBだったり)なので、class_get_varsした後に取り出しました。
0765nobodyさん
2007/09/23(日) 12:14:54ID:???echo A::$a; ~~~~~
0766nobodyさん
2007/09/23(日) 12:17:54ID:???http://php.benscom.com/manual/ja/language.oop5.static.php
0767nobodyさん
2007/09/23(日) 13:22:33ID:ByDzcAVcecho "正解";
}
これ書き方あってますよね?
===を使う場合、trueを"で囲むと文字列になるから
囲まないで書くべきですよね?
0768nobodyさん
2007/09/23(日) 13:30:20ID:???== は、値(暗黙の変換含む)の一致で true になる
=== は、値と型両方が一致した場合のみ true になる
$a = 1;
if ($a == true) // 暗黙の変換により true になる
if ($a === true) // intとboolで型が違う為 false になる
0769nobodyさん
2007/09/23(日) 13:38:01ID:x8KAGuvr0771nobodyさん
2007/09/23(日) 13:47:13ID:???0772743
2007/09/23(日) 14:26:13ID:???言えてる
javaとperlがメインだったけど perlは相当気持ち悪い でも適当でもOKだから仕事以外で便利
phpも相当気持ち悪いが どうせ気持ち悪いならperl並に徹底してくれないと困る
0774nobodyさん
2007/09/23(日) 15:25:01ID:???だから.=は+=とおんなじ意味
$str = "hoge";
$str .= "huga";
echo $str;
hogehuga
0775nobodyさん
2007/09/23(日) 16:23:22ID:giEVgmm5どうやったらenableになるのかわからなくて気持ち悪い・・・
0776nobodyさん
2007/09/23(日) 16:36:28ID:???queryAll等の結果セットをfree()で解放してあげましょうとなっています。
queryAllをした直後に結果セットの内容を使うのであれば、すぐにfree()してしまえば
良いと思うんだけど、その結果セットをその後の処理でも使いまわす場合は、どうするのが
一番良いのでしょうか?
今考えてるのは、結果セットを新しく作った配列にコピー後に、結果セットはfree()してしまおうかと
思っているのですが、何となく無駄な事をやってる気がして・・・。
0779775
2007/09/23(日) 17:42:36ID:giEVgmm5スマン、書き込む前に必死にググッたりマニュアル読んでみたり
関連リンク回ったりしてみたんだが見つからなかったんだ。
もう少し調べてみるわ。ありがとう。
0780nobodyさん
2007/09/23(日) 18:04:44ID:20rGQLTi複数の文字列の共通項を取り出す処理をしたいのですが、
そのような便利な関数がありますでしょうか?
例
$a = "テレビを昨日見た。";
$b = "昨日テレビを見た。";
$c = "テレビを明日見る。";
$result = function_X($a, $b, $c);
echo $result;
$resultが$a、$b、$cの共通項の「テレビを」が出力されると、
いいのですが、substrとかで一文字ずつの総当りの組み合わせで共通項の検査すると、
ものすごい計算量になるので、何とかもっと簡単な方法はないかと悩んでいます。
宜しくお願いします。
0781nobodyさん
2007/09/23(日) 18:05:38ID:???0782nobodyさん
2007/09/23(日) 18:09:03ID:20rGQLTiレスありがとうございます。
形態素解析も考えたのですが、今回は文法レベルで単語分けをする必要がなく、
又英語などや記号も混じってしまうので、機械的に複数変数の共通部分の文字列のみを
取得したいと思っています。
言葉足らずですみません。引き続きよろしくお願いします。
0783nobodyさん
2007/09/23(日) 18:11:05ID:???0784nobodyさん
2007/09/23(日) 18:13:29ID:CMYUgsUj0785nobodyさん
2007/09/23(日) 20:24:31ID:???0786nobodyさん
2007/09/23(日) 22:59:17ID:d1xYr/ljperlのtruncateに該当するphpの関数ってありますか?
0787nobodyさん
2007/09/23(日) 23:04:55ID:???0788nobodyさん
2007/09/23(日) 23:09:14ID:???答える気が無いなら、書き込まなきゃいいのに。
0792nobodyさん
2007/09/23(日) 23:49:44ID:mTLKY/f7初歩的な質問で申し訳ないのですが、どなたかご教示願えませんか?
よろくしお願いします。
______________________
| 一段目 | td一 | td二 | td三 | td四 | td五 |
| 二段目 | td六 | td七 | td八 | td九 | td十 |
| 三段目 | td一 | td二 | td三 | td四 | td五 |
| 四段目 | td六 | td七 | td八 | td九 | td十 |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0795nobodyさん
2007/09/23(日) 23:59:57ID:???くだ質だからなんでも質問すりゃいいって、どんだけユトリなのよ
0796nobodyさん
2007/09/24(月) 00:24:55ID:JxEty0kG編集してて遅くなりました。ごめんなさい
こう書いたんですがこれじゃ駄目ですよね…
>>792みたいな横に長いテーブルを出したいのですが(;´Д`)
echo "<table>";
$table = array (
"一段目" => "td一", "td二", "td三", "td四", "td五",
"二段目" => "td六", "td七", "td八", "td九", "td十",
"三段目" => "td一", "td二", "td三", "td四", "td五",
"四段目" => "td六", "td七", "td八", "td九", "td十"
);
foreach ($table as $key => $value) {
echo "<tr>";
echo "<td>$key</td>";
echo "<td>$value</td>";
echo "</tr>";
}
echo "</table>";
0798nobodyさん
2007/09/24(月) 00:56:56ID:Wq/5iUlOforeach ($table as $key => $value) {
if(!is_numeric($key)){
echo $tr."<tr>";
echo "<td>$key</td>";
$tr = "</tr>";
}
echo "<td>$value</td>";
}
echo "</tr>";
echo "</table>";
0801nobodyさん
2007/09/24(月) 01:30:21ID:???これって
$table[一段目], $table[0], …$table[二段目], $table[4], …
こういう配列になるわけだろ?何が嬉しいのかわかんない
0802796
2007/09/24(月) 01:55:21ID:JxEty0kGできました!
何が嬉しいのかと言われたら確かにその通りですが(;´Д`)
ありがとうございました。
0803798
2007/09/24(月) 02:10:26ID:Wq/5iUlO上の方で言われてるようにその配列は使い勝手が悪いです。
柔軟性に欠けますから工夫が必要です。
頑張ってください。
0804nobodyさん
2007/09/24(月) 03:46:09ID:???> $table = array (
> "一段目" => "td一", "td二", "td三", "td四", "td五",
> "二段目" => "td六", "td七", "td八", "td九", "td十",
> "三段目" => "td一", "td二", "td三", "td四", "td五",
> "四段目" => "td六", "td七", "td八", "td九", "td十"
> );
これって本当は
$table = array (
"一段目" => array("td一", "td二", "td三", "td四", "td五"),
"二段目" => array("td六", "td七", "td八", "td九", "td十"),
"三段目" => array("td一", "td二", "td三", "td四", "td五"),
"四段目" => array("td六", "td七", "td八", "td九", "td十"),
);
ってしたかったわけじゃないのか?
見た目と構造が全然かみ合ってないそ。
0805nobodyさん
2007/09/24(月) 06:52:38ID:???その構造なら条件分岐がいらないね
printf("<table>\n");
foreach($table as $key => $list){
printf("<tr><td>%s</td>", $key);
foreach($list as $value){
printf("<td>%s</td>", $value);
}
printf("</tr>\n");
}
printf("</table>\n");
0808nobodyさん
2007/09/24(月) 12:43:32ID:aGF/5enb"0" => "一段目",
"1" => "二段目",
"2" => "三段目",
"3" => "四段目",
);
$table_values = array (
"0" => array("td一", "td二", "td三", "td四", "td五"),
"1" => array("td六", "td七", "td八", "td九", "td十"),
"2" => array("td一", "td二", "td三", "td四", "td五"),
"3" => array("td六", "td七", "td八", "td九", "td十"),
);
$table_count = count($table_names);
こうしないでいいの?
俺てっきりマルチバイトダメだと思ってたよ
0809nobodyさん
2007/09/24(月) 13:15:20ID:???0810nobodyさん
2007/09/24(月) 13:24:01ID:???そもそも配列の要素数が行毎に異なるなんてのは考えたくないけど。
つじつま合わせの補完計画。
$maxcount = 0;
foreach($table as $list){
if($maxcount < count($list))
$maxcount = count($list);
}
printf("<table>\n");
foreach($table as $key => $list){
$list = array_pad($list, $maxcount, "-");
printf("<tr><td>%s</td>", $key);
foreach($list as $value){
printf("<td>%s</td>", $value);
}
printf("</tr>\n");
}
printf("</table>\n");
0811nobodyさん
2007/09/24(月) 13:37:12ID:BGlF/jIi登録フォームで間違えた時は、そのページの上部にエラーメッセージが出る
と言った処理方法だとします。
エラーがある場合、セレクトメニューに入力した値が消えてしまうのですが、
以下のような方法以外に、出来るだけ簡単に対処出来ないでしょうか?
function selectForm($form_name,$val){
$names = array("あああ","いいい","ううう");
echo "<select name=\"$form_name\">";
for($i=0;$i=count($names);$i++){
if($names)[$i]=="$val"){
$selected='selected="selected"';
}else
$selected="";
}
echo "<option value=\"$val\" $selected>$val</option>\";
}
echo "</select>";
}
selectForm("test",$_POST["test"]);
0812nobodyさん
2007/09/24(月) 14:05:59ID:3GSML6xRif (is_array($vals)){
array_map(array($this,'valsclear'),&$vals);
}else{
$vals = '';
}
値だけを消去したいのですが、どうしたら良いでしょうか?
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ある一定の作業だけアセンブリで書きたいのですが。
■ このスレッドは過去ログ倉庫に格納されています