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

【PHP】下らねぇ質問はここに書き込みやがれ 54

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/09/09(日) 12:42:57ID:64tYOx8R
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、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カテゴリ)の各スレで
0778nobodyさん2007/09/23(日) 17:20:54ID:???
>>776
>>1
07797752007/09/23(日) 17:42:36ID:giEVgmm5
>>777
スマン、書き込む前に必死にググッたりマニュアル読んでみたり
関連リンク回ったりしてみたんだが見つからなかったんだ。

もう少し調べてみるわ。ありがとう。
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
>>781
レスありがとうございます。
形態素解析も考えたのですが、今回は文法レベルで単語分けをする必要がなく、
又英語などや記号も混じってしまうので、機械的に複数変数の共通部分の文字列のみを
取得したいと思っています。

言葉足らずですみません。引き続きよろしくお願いします。
0783nobodyさん2007/09/23(日) 18:11:05ID:???
そのような関数はない。文字列関数らへん見て自作すれ。
0784nobodyさん2007/09/23(日) 18:13:29ID:CMYUgsUj
>>782はどこかへ誘導しようとしているとみた
0785nobodyさん2007/09/23(日) 20:24:31ID:???
正規表現で、各文字列について走査すればよい
0786nobodyさん2007/09/23(日) 22:59:17ID:d1xYr/lj
またわからない 
perlのtruncateに該当するphpの関数ってありますか?
0787nobodyさん2007/09/23(日) 23:04:55ID:???
ググれ
0788nobodyさん2007/09/23(日) 23:09:14ID:???
くだ質でググれって言っちゃう奴は、何考えてるんだろうね。
答える気が無いなら、書き込まなきゃいいのに。
0789nobodyさん2007/09/23(日) 23:13:48ID:???
>>786
ftruncate
0790nobodyさん2007/09/23(日) 23:17:07ID:???
>>788
なんでくだ質スレでググれと言っちゃいけないのか詳しく
0791nobodyさん2007/09/23(日) 23:34:35ID:???
>>789
さんくすこ

>>790
>なんでくだ質スレでググれと言っちゃいけないのか詳しく
ググれ
0792nobodyさん2007/09/23(日) 23:49:44ID:mTLKY/f7
foreachで↓みたいなテーブルを作成したいのですがうまくいきません。
初歩的な質問で申し訳ないのですが、どなたかご教示願えませんか?
よろくしお願いします。
______________________
| 一段目 | td一 | td二 | td三 | td四 | td五 |
| 二段目 | td六 | td七 | td八 | td九 | td十 |
| 三段目 | td一 | td二 | td三 | td四 | td五 |
| 四段目 | td六 | td七 | td八 | td九 | td十 |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0793nobodyさん2007/09/23(日) 23:58:20ID:???
>>791
それに関して検索してどういうサイトを見つけろと?
それが示せないようならまともな回答になってない
0794nobodyさん2007/09/23(日) 23:58:52ID:???
>>792
書いたコードをUP
0795nobodyさん2007/09/23(日) 23:59:57ID:???
なにこの流れ? 786=788=791か?

くだ質だからなんでも質問すりゃいいって、どんだけユトリなのよ
0796nobodyさん2007/09/24(月) 00:24:55ID:JxEty0kG
>>794
編集してて遅くなりました。ごめんなさい
こう書いたんですがこれじゃ駄目ですよね…
>>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>";
0797nobodyさん2007/09/24(月) 00:47:10ID:???
>>796
なんじゃそりゃ。
コード書く前に落ち着いて頭の中で整理してアルゴリズム考えてみ。
0798nobodyさん2007/09/24(月) 00:56:56ID:Wq/5iUlO
>>796

foreach ($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>";
0799nobodyさん2007/09/24(月) 00:57:42ID:???
>>797
アルゴリズム?
アルゴニズムだろ??
0800nobodyさん2007/09/24(月) 01:13:42ID:???
>>799
>>799
>>799
0801nobodyさん2007/09/24(月) 01:30:21ID:???
>>796
これって
$table[一段目], $table[0], …$table[二段目], $table[4], …
こういう配列になるわけだろ?何が嬉しいのかわかんない
08027962007/09/24(月) 01:55:21ID:JxEty0kG
>>798
できました!
何が嬉しいのかと言われたら確かにその通りですが(;´Д`)
ありがとうございました。
08037982007/09/24(月) 02:10:26ID:Wq/5iUlO
>>802
上の方で言われてるようにその配列は使い勝手が悪いです。
柔軟性に欠けますから工夫が必要です。
頑張ってください。
0804nobodyさん2007/09/24(月) 03:46:09ID:???
>>796
> $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:???
>>804
その構造なら条件分岐がいらないね

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");
0806nobodyさん2007/09/24(月) 08:43:14ID:???
>>805
でもそれじゃぁ全部の段が同じ数じゃないと
HTML的に変になるという

まぁそこまで考えんでもいいか・・・
0807nobodyさん2007/09/24(月) 10:01:06ID:???
>>806
変にループ条件いじるくらいなら
先に変数側を正規化した方が楽だけどね。
0808nobodyさん2007/09/24(月) 12:43:32ID:aGF/5enb
$table_names = array (
"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:???
>>806
そもそも配列の要素数が行毎に異なるなんてのは考えたくないけど。
つじつま合わせの補完計画。

$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:3GSML6xR
function valsclear($vals){
if (is_array($vals)){
array_map(array($this,'valsclear'),&$vals);
}else{
$vals = '';
}

値だけを消去したいのですが、どうしたら良いでしょうか?
0813nobodyさん2007/09/24(月) 14:45:48ID:HSprOhmP
txtファイルをUPして、その内容を表示したいのですが、文字化けしてしまいます。
PHPの記述・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:???
auto→SJIS
0815nobodyさん2007/09/24(月) 15:38:02ID:???
確かに、 auto だとちゃんとconvertできてないことあるよね。
なんでだろ。
PHPのソース見れば分かるんだろうけど。
08168132007/09/24(月) 15:47:27ID:/07n7WU2
>>814
ありがとうございます、ちゃんと表示されました。
autoは万能じゃないて事ですかね。
0817nobodyさん2007/09/24(月) 16:06:22ID:???
>>808
マルチバイトどころかコントロールコード入れるのだってアリだよ
0818nobodyさん2007/09/24(月) 16:30:12ID:???
>>811
これ、本当に動いてますか? 怖くて手を着けたくないっす。

>>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
php4.xにてクラス内のメソッドから継承関係に無い別のインスタンス内の
プロパティにアクセスするにはどうすればよいでしょうか?
0820nobodyさん2007/09/24(月) 16:51:18ID:???
>>819
メソッドへの引数でインスタンスを渡してやれば?
0821nobodyさん2007/09/24(月) 17:09:15ID:9opMSOGn
>>820 アクセスできました、ありがとう!
0822nobodyさん2007/09/24(月) 19:36:00ID:???
>>811
どうしたってセレクトのアイテム数分ループさせて比較しなきゃいけないんだから、それ以上工数は減らせないでしょう。
ただ見た目的にシンプルかつ柔軟な関数にするだけでいいならこんなんでいかかでしょうか?

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が入っているという前提になってます)
08238112007/09/24(月) 19:42:41ID:???
>>822
ソースありがとうございます。参考にさせていただきます。
ただ、やはり一般的には811の方法しかないですよね。。
0824nobodyさん2007/09/24(月) 19:50:39ID:???
>>823
Javascript前提なら、PHPでは比較しないでループで書き出すのみにして
onloadでJavascriptに比較させてもいいんだけどね。
普通はやらんねw
0825nobodyさん2007/09/24(月) 19:54:06ID:???
>>823
基本的には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:???
>>825
空文字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
あるクラスの__destructメソッド内でMySQLの接続を切るmy_closeメソッドを記述してます。
ほかのクラスで上記クラスをインスタンス化して保持します。
このインスタンス変数をinstanceとした場合、DBの接続を切るには、
instance -> __destruct() と記述すればいいのでしょうか?
0829nobodyさん2007/09/24(月) 23:11:07ID:???
>>828
デストラクタはインスタンスが破棄される時に自動実行される。
$instance->__destruct()とした場合、デストラクタは実行されるが、インスタンスは破棄されておらず、
インスタンスが破棄される時(関数を抜ける時や実行終了時)にもデストラクタが二重実行されてしまう。
明示的に変数を破棄する場合はunset($instance)を使う。
但し、unset($this)といった様にインスタンスが自身を破棄することは出来ないので注意されたし。
0830nobodyさん2007/09/24(月) 23:57:32ID:JlRJpJ4M
>>829
どうもありがとうございました。
Smartyを使ってMVCに基づいたプログラミングをしてます。
Controlはポストデータ受け、Modelのインスタンス生成、戻り値(ResultSet)のsmarty->assignセット、Viewであるテンプレートコール。
ModelはSQLの実行など。
Smartyクラスを継承したサブクラスを作り、そのconstructでMySQLやDBへの接続をしてます。
DBの切断をどこでやるか迷っていたのです。
いろいろあると思いますがなかなか設計が・・・
0831nobodyさん2007/09/25(火) 00:00:45ID:8D5Ec5Bn
切断処理は必要?
0832nobodyさん2007/09/25(火) 00:10:05ID:ibGZ3o0m
なんか明示的にあった方がいいかなと・・・
0833nobodyさん2007/09/25(火) 00:21:07ID:???
>Smartyクラスを継承したサブクラスを作り、そのconstructでMySQLやDBへの接続をしてます。
Smartyの派生クラスでDB接続って、MVCがごっちゃになりそうなもんだが。
0834nobodyさん2007/09/25(火) 00:45:59ID:ibGZ3o0m
>>833
そうですね。
DB接続用のクラスを作ってSmartyクラスの派生とは分離させてみます。
ありがとうございました。
0835nobodyさん2007/09/25(火) 14:56:33ID:RlJd1MSD
$hoge = include("hoge/hoge.php");

↑

こういうことやりたいのですが
これだと$hoge関係なしにそのままインクルードされてしまいます
実現方法を教えてください
0836nobodyさん2007/09/25(火) 15:00:09ID:???
>>835
もともとそういう使い方をするものではない
getして放り込んで実行しろ
0837nobodyさん2007/09/25(火) 15:07:19ID:RlJd1MSD
>>736
ありがとうございます。わかりました
GETのやりかたをGOOGLEで検索してみます
0838nobodyさん2007/09/25(火) 15:12:10ID:???
>>835
多分でしかないけど

ob_start();
include("hoge/hoge.php");
$obj = ob_get_clean();
0839nobodyさん2007/09/25(火) 15:20:55ID:???
--- hoge.php ---
return <<<EOF
なんたらかんたら
EOF;

--- 読み元.php ---
if ($contents = @include('hoge.php')) {
  echo $contents;
} else {
  echo 'hoge.phpがねーぞ';
}
0840nobodyさん2007/09/25(火) 15:33:42ID:RlJd1MSD
>>838
ありがとうございます できました
>>839
ありがとうございます コードを保存しました こんどやってみますね
0841nobodyさん2007/09/25(火) 16:25:55ID:QDhH7pTb
いまA鯖からB鯖にFTPでファイルをアップロードするphpプログラム作ってるんですが
ログインしてカレント移動までは正常にいくのですいが、ファイルのアップロードがうまくいきません。
まったくうまくいかないのかというとそうではなくて、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:???
echo preg_replace('start(.*)end', '\1', $src);
0844nobodyさん2007/09/25(火) 18:07:39ID:Bc2ZA9JH
filter関数便利じゃねって調べてたんだけど、
これさ元からあるフィルタ以外に拡張したい場合、
FILTER_CALLBACKしか無い感じですか?

新しいフィルタ定義して呼び出すとか無理っぽい?

それでもfilter_listやfilter_idが存在するのは
ソースコード書き換えてPHPからコンパイルし直せつうこと?
0845nobodyさん2007/09/25(火) 18:14:45ID:9q66wLmd
自分で掲示板を作ると愛着がわくのでだれかcgiで掲示板を作成する
サイトを教えてください。
0846nobodyさん2007/09/25(火) 18:26:04ID:???
>>844
filter_id は ext/filter/filter_private.h にあるC的にスタティックなID番号を示すぽいので、
スクリプト実行時に動的に増やすのはcallback以外ムリじゃないかな。
0847nobodyさん2007/09/25(火) 19:09:20ID:???
「100」とか「50」という文字列を「100.00」「50.00」というように表示したいのですが
number_format($str,2)だと「100」「50」となってしまいます。
何か方法無い物でしょうか?

出力はSmartyを通してます
0848nobodyさん2007/09/25(火) 19:18:29ID:???
>>847
sprintf
0849nobodyさん2007/09/25(火) 19:34:59ID:???
>>846
どうもです。やっぱりそんな感じなんですね。
うーん使い勝手がいきなり微妙に・・・
0850nobodyさん2007/09/25(火) 19:48:25ID:???
>>848
うほ!ありがとうございます!
printfでやって駄目で、sprintfで試してなかったです
08518412007/09/25(火) 20:34:09ID:xfKDGXzl
>>841です
追加情報
A鯖からftpコマンドでは正常にやり取りできます。

会社のTurboLinux10サーバーからA鯖である自宅のCentOS5へ向けて
さっきのスクリプトを走らせると正常に処理が完了します。

A鯖から外部へ向けて走らせるとまったくだめです。
会社のTL10S、ローカルWindowsのFTP鯖、ジオシティーズすべてだめでした。
シェルからFTPコマンドではすべて正常に処理できました。

phpinfoで再度確認してみましたが ftp enable となっており使える設定のはずですが。。。
Apache2.x自体 yum にてインストールしました。
スクリプトではなくA鯖に問題があるのでしょうか?
08528412007/09/25(火) 20:41:52ID:xfKDGXzl
>>851
失礼しました、自己解決しました。
A鯖のiptablesの設定ミスをしていました。
ありがとうございました。
0853nobodyさん2007/09/25(火) 20:52:40ID:???
質問です。phpでsendmailのパスを設定する方法が分からず困ってます。
CGIのように設定する必要はないのでしょうか。
08548532007/09/25(火) 21:00:48ID:???
すみません、自己解決しました
0855nobodyさん2007/09/25(火) 21:04:32ID:???
>>854
言ってくれてありがとう 自己解決です
0856nobodyさん2007/09/25(火) 21:38:42ID:Wp8RlZHh
PHPでアセンブリ言語って使うことできますか?
ある一定の作業だけアセンブリで書きたいのですが。
0857nobodyさん2007/09/25(火) 21:40:17ID:???
どんな作業よ
0858nobodyさん2007/09/25(火) 21:46:19ID:???
ある問題に一元的な答えを追及し自己解決したというのは、
オレから言わせれば、欺瞞でありアイデンティティーの欠如に他ならない。
0859nobodyさん2007/09/25(火) 21:57:23ID:???
>>856
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:???
まずどこで失敗してるのか切り分けてから出直して来い
08628602007/09/25(火) 22:14:56ID:259tGTbD
860っす。
説明下手くそですんません。
失敗しているのはおそらくここっす。

$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:???
うん、そこがどうなるわけ?
08648602007/09/25(火) 22:19:26ID:259tGTbD
1度目はOpenしたファイルに書き込めるのですが、2度目は真っ白けっけのファイルができて
何にも書かれていないのです(涙)
ちなみにファイルはw+でオープンしています。
(つまりファイルオープンはエラーじゃないと頭悪いなりに考えをめぐらせて見ました)
ということは$rsに何にも入っていないか、fputsが失敗しているかのどっちかかなと。
0865nobodyさん2007/09/25(火) 22:21:14ID:???
内容確認せずGETをクエリにってちょ、ま、おま!
08668602007/09/25(火) 22:25:38ID:259tGTbD
え?まずいっすか(笑)
一応ここには決まったStringしかプログラムが返さないようになっているので平気かと。
しかも、1回目はうまくいくんですよ〜。
ヒントだけでもいいんでお願いします〜〜。
0867nobodyさん2007/09/25(火) 22:29:41ID:???
外から来る変数は全て汚染されてる前提でチェックするのが吉。
0868nobodyさん2007/09/25(火) 22:29:51ID:???
860ワロス
08698602007/09/25(火) 22:31:47ID:259tGTbD
了解っす♪
今はLocalでテストなんで平気ですけど、最終的にはかならず切り分けしてチェックを通ったものだけを
実行するようにいたします。
0870nobodyさん2007/09/25(火) 22:39:05ID:???
まず$_GET['key'] の内容をそのファイルに書き込んでみたら?
リロった時に入ってないとかってオチかもしれんよ
08718602007/09/25(火) 22:48:49ID:259tGTbD
ほんまじゃあああ。めっさ興奮。
直で値、書き込んだらなぜか動作しないっす。
ただし、同じものをコピペしてQueryBrowserで実行するとなぜかきっちり実行される。
これってどういうことなんですかね。
本当にアホな質問なんでしょうがよろしくお願いします。。。
0872nobodyさん2007/09/25(火) 23:00:04ID:???
>>871
そのFunc_queryってのがへんなんじゃない?
普通にmysql_queryで書いたらどうだね
08738602007/09/25(火) 23:05:27ID:259tGTbD
なんか引き継ぐ前のおっさんが「ややこしい処理を全部外部ファイルにまとめといたよ♪」とのこと。
俺もFunc_Queryってなんだろうって思って確認したら
function Func_Query($strSQL){
$rs=mysql_query($strSQL);
return $rs;
}
って書いてありますたorz
ちなみに今回はmysql_queryでやってもまったく同じ結果ですね。
もしかして日本語を代入してるのがまずいんでしょうかね?
0874nobodyさん2007/09/25(火) 23:08:11ID:???
>>873
文字コードだと思う
08758562007/09/25(火) 23:12:14ID:Wp8RlZHh
>>859
レスありがとうございます。
仰るとおりCの様にインラインで書きたかったのですが無理なのですね。
参考になりました。どうもありがとうございます。
08768602007/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から熱エネルギーを生成している意義がよくわからないです。
■ このスレッドは過去ログ倉庫に格納されています