【PHP】下らねぇ質問はID出して書き込みやがれ 89
■ このスレッドは過去ログ倉庫に格納されています
0001●
2009/10/11(日) 21:18:54ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 88
http://pc11.2ch.net/test/read.cgi/php/1253061577/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0679nobodyさん
2009/10/26(月) 17:53:40ID:+hgb+ZZqスレチでしたら誘導お願いします。
Sample.phpへ、buttonを配置し、JavaScriptでメソッドを定義。
function A1(){
if(confirm('ごまだれですか?')){
<?php
mysql_query("begin");
mysql_query("update `gomagoma` set `syurui` = 'くろごま' where `syurui` = 'alpha'") or die(mysql_error());
mysql_query("commit");
mysql_query("begin");
mysql_query("update `gomagoma` set `syurui` = 'しろごま' where `syurui` = 'beta'") or die(mysql_error());
mysql_query("commit");
mysql_query("begin");
mysql_query("update `gomagoma` set `syurui` = 'ごまふあざらあし' where `syurui` = 'hex'") or die(mysql_error());
mysql_query("commit");
?>
window.alert('内容を変更しました。')
}
}
としていますが、DBを覗いてみたところ、アップデートされていませんでした。
ですが、MysqlErrorは返ってきておらず、そのままJavaScriptで記述したalertが実行されます。
原因を現在当たっていますが、何か思い当たる点がありましたらご指摘お願いします。
0680nobodyさん
2009/10/26(月) 18:00:11ID:???677じゃないけど、そんなもんだと思うぞ
大して重要でもないのに何を気にする事あるんだ?
そんなに気になるなら自動ログインなんてしなきゃいいだけじゃないか
0681nobodyさん
2009/10/26(月) 18:08:17ID:???サーバサイドとクライアントサイドがごっちゃになってないか?
「function A1()」ってのはjavascript側で定義している関数だろ?
その中のphp(mysql_query)は、button押下に関係無くそのページロードしたら実行されるぞ?
ブラウザのソース見てみなよ。
0683nobodyさん
2009/10/26(月) 18:17:35ID:???PHPの中身はともかくとしても、
PHP部が実行されて、DBが書き換えられるなどした後、
出力などがなければ<?php から ?>までが無くなったテキストが、
ヘッダなどがついてブラウザに渡され、それからjavascriptが動くので、
ブラウザがうけとるのは
function A1(){
if(confirm('ごまだれですか?')){
}
}
になります。
0684nobodyさん
2009/10/26(月) 19:14:03ID:???if(confirm('ごまだれですか?')){
window.alert('内容を変更しました。')
}
}
抜けてた
0687nobodyさん
2009/10/26(月) 22:27:35ID:???0688nobodyさん
2009/10/26(月) 23:39:47ID:???0689nobodyさん
2009/10/27(火) 00:54:28ID:???クエリを書いておく事が出来る。
というフレームワークのアイデアを頂きました。
クレームワームの名前は「ごまふあざらあし」にしようと思います。
0690nobodyさん
2009/10/27(火) 10:58:21ID:???0691nobodyさん
2009/10/27(火) 11:16:23ID:???0692nobodyさん
2009/10/27(火) 11:34:04ID:???0693nobodyさん
2009/10/27(火) 11:44:23ID:???0695nobodyさん
2009/10/27(火) 19:25:48ID:???このように書かれたテキストファイルから「名無し」「あいうえお」を取得する方法は
正規表現でひとつずつ抜き出すほかにありますか?
0698nobodyさん
2009/10/27(火) 19:39:41ID:73GIvY2Uまた、上で取得した文字列を$_POSTのような配列形式に変換したいのですが、そのような関数はありますか?
0699nobodyさん
2009/10/27(火) 19:44:58ID:???$_REQUEST
0701nobodyさん
2009/10/27(火) 19:59:55ID:???POSTされた生のデータが欲しいって事かい?
parse_str(file_get_contents('php://input'), $f);
var_dump($f);
0702nobodyさん
2009/10/27(火) 21:21:52ID:???すげえ
0704nobodyさん
2009/10/28(水) 01:05:41ID:EMbPGL3Ysimplexml_load_fileで読みこんだObjectから
$q = $_GET["q"];
echo $xml->item[$q]->name;
としたいのですが、何も表示されません。
echo $xml->item[0]->name;
だと正しく表示され
$q = 0;
echo $xml->item[$q]->name;
でも正しく表示されます。
$q = $_GET["q"];
echo $q;
echo $xml->item[$q]->name;
とした場合は、$qだけが表示されました。
simplexmlでは$_GETが使えないのでしょうか?
解決策をお教えいただきたいです。
0706nobodyさん
2009/10/28(水) 01:12:57ID:EMbPGL3Yありがとうございます!
$q = $_GET["q"]+1-1;
と試してみるとうまくいきました。
ホントにお恥ずかしい限りです・・・
0707nobodyさん
2009/10/28(水) 01:16:08ID:???0708nobodyさん
2009/10/28(水) 01:17:19ID:???でおk
0709nobodyさん
2009/10/28(水) 01:18:34ID:???負荷とかそんなに変わらないのならクラス定義をまとめて最初に読み込んだほうがらくだよね。。。
0710nobodyさん
2009/10/28(水) 01:20:18ID:???0712nobodyさん
2009/10/28(水) 02:52:06ID:???ただJavaの場合コンパイラが最適化してくれるので問題ないが
PHPはインタプリタなので最適化のしようがないという
つまり全部includeなんてしたらそりゃ遅くなる
0715nobodyさん
2009/10/28(水) 10:42:00ID:v0axKvNXセッションを使用する場合は必ずつけなければならないのですよね?
これを記述するのはMVCモデルだとVの部分に記述するのであってますでしょうか?
0716nobodyさん
2009/10/28(水) 10:43:21ID:???0717716
2009/10/28(水) 10:45:50ID:???ありがとうございます
早速組み方を考えて見ます
0718nobodyさん
2009/10/28(水) 10:47:23ID:???0719679
2009/10/28(水) 14:53:16ID:op4mA5/pそうか・・・表示されてる時には既にHTMLとして返ってきてるんですよね。
この場合は、dbedit.phpのようなものを別途つくり
<?php
include("dbedit.php");
A1();
?>
という風にすればいいのかな?
しかし、この場合でも、A1だけではなく、A2,A3と続く様であれば
それの振り分けはどう実装したらいいでしょうか?
ご意見や、実装例等がありましたら、ご教示よろしくお願い致します。
0721nobodyさん
2009/10/28(水) 15:30:07ID:???まずそのA1, A2, A3でなにをするのか書かないと。あと関数ってわかってる?振り分けってどういうことするの?
0722nobodyさん
2009/10/28(水) 15:43:14ID:???A1()って>>679を見る限りJavaScriptのfunctionだろ? 呼べるわけがないw
>>720の通りにまずJavaScriptなしで動くようにしてみたら?
サーバー側でpostされた内容によってSQL発行するだけだよ
0723nobodyさん
2009/10/28(水) 18:25:52ID:???0724nobodyさん
2009/10/28(水) 18:34:44ID:???javascript無し、DB無しでPHPだけでいろいろ慣れるのが先だな
0725nobodyさん
2009/10/28(水) 18:35:06ID:???A2()で「しろごま」
A3()で「ごまふあざらあし」
を処理する気まんまんの>>679にWeb100.0
0727nobodyさん
2009/10/29(木) 00:12:37ID:???それと同時にプログラミングの概念について解説してる本を読んだ方がいいのかも
概念が足りてない
0728nobodyさん
2009/10/29(木) 03:46:52ID:???0729nobodyさん
2009/10/29(木) 09:54:12ID:xBLZE2eU【バージョン】php5.2.10
SimpleXMLElementに関する質問です。
mlから特定の属性を持った要素を削除するにはどうすれば良いのでしょうか?
例を挙げると、
『sample.xml』
<?xml version="1.0" encoding="UTF-8" ?>
<library>
<book id="00001">
<title>aaa</title>
<author>Emily</author>
</book>
<book id="00002">
<title>bbb</title>
<author>John</author>
</book>
<book id="00003">
<title>ccc</title>
<author>Mike</author>
</book>
</library>
とした場合、idが「00002」の要素を削除するという感じです。
--続く--
0730729
2009/10/29(木) 09:56:09ID:xBLZE2eUいろいろ調べたところ、
$xml = new SimpleXMLElement('sample.xml', null, true);
unset($xml->book[0]);
で削除は出来るのようですが、配列で何番目という指定ではなくid「00002」の要素を指定して削除し、
<?xml version="1.0" encoding="UTF-8" ?>
<library>
<book id="00001">
<title>aaa</title>
<author>Emily</author>
</book>
<book id="00003">
<title>ccc</title>
<author>Mike</author>
</book>
</library>
となる事が目的です。
どうぞよろしくお願いします。
0731nobodyさん
2009/10/29(木) 12:08:53ID:???foreachで出来た方いたら教えてください。
$xml = new SimpleXMLElement('sample.xml', null, true);
for ( $i = 0 ; $i < count($xml->book);$i++) {
if ( $xml->book[$i]["id"] == " 00002") {
unset( $xml->book[$i] );
}
}
echo $xml->asXML();
0733nobodyさん
2009/10/30(金) 06:12:51ID:5l/tuOOstaro@example.com
これだと4文字決め打ちになってしまいます。
preg_replace('/[a-z0-9\.\-\_]+@/i', '****@', $text);
いまのところシンプルに書ける方法で思いつくのは、
長い文字数から順に置換していく方法です。
forなど使えばシンプルには書けそうです。
preg_replace('/[a-z0-9\.\-\_]{10}@/i', '**********@', $text);
preg_replace('/[a-z0-9\.\-\_]{9}@/i', '*********@', $text);
...
でも美しい方法とは思えません。
定石、または美しい方法はありますか?
0734nobodyさん
2009/10/30(金) 08:26:53ID:???たとえば
$text = "taro@example.com";
echo preg_replace('/([a-z0-9\.\-\_]+)@/ie', "str_repeat('*',strlen('$1')) . '@'", $text);
0735nobodyさん
2009/10/30(金) 10:41:53ID:???$text = "taro@example.com";
$array = explode('@', $text);
echo str_repeat('*',strlen($array[0])) . '@' . $array[1];
0736nobodyさん
2009/10/30(金) 16:17:27ID:???$text='taro@example.com';
echo str_repeat('*', strpos($text,'@')).strstr($text,'@');
0737nobodyさん
2009/10/30(金) 17:16:58ID:5l/tuOOsありがとうございます。e修飾子とかはじめて認識しました。
Yahoo!グループの過去ログのように「メール本文中の署名などの個人情報を隠匿」が目的なので、
>>734の方法で行かせていただこうと思います(目的を書いとくべきでしたごめんなさい)。
精進します。
0738nobodyさん
2009/10/30(金) 20:21:02ID:k7DoHVtBphpのソースコードそのものを取り込んで
そのコードを解析する
みたいな手段ってありませんか?
0739nobodyさん
2009/10/30(金) 20:25:31ID:???単に構文解析だったら、PHPでPHP用のレキシカルアナライザとパーサ作ればいいんだけど、
それだけやったって面白くないよね、手間なだけで。
何をしたいのかが良く分からん。
0740nobodyさん
2009/10/30(金) 22:48:05ID:pyIKqVVx{
private $ar,$tes;
public function __construct()
{
$this->ar = array('tes');
(ここで 変数 $this->($this->ar[0]) この場合 $this->tes に何らかの値を代入したい)
echo $this->tes;
}
}
$this-> に続く変数名を変数の値で表す方法はありますか?
宜しくお願いします。
0741nobodyさん
2009/10/30(金) 22:52:15ID:???0742nobodyさん
2009/10/30(金) 23:25:37ID:pyIKqVVx$this->tes = "b"; と書くのではなく、tesの部分に、"tes"が代入された変数を使いたいのです。
0743nobodyさん
2009/10/31(土) 00:17:51ID:???echo $this->$var;
こんな感じで
0744nobodyさん
2009/10/31(土) 00:38:36ID:???runkit
http://jp2.php.net/manual/ja/book.runkit.php
0746nobodyさん
2009/10/31(土) 09:17:44ID:5b/pi/nwアップローダー作る時にテンポラリのディレクトリから保存用のディレクトリに
ファイルをcopy → もとのテンポラリファイル削除 って流れがあり、
if(copy($tmpFile, $lastFile)){unlink($tmpFile);}
という感じの処理をすると思います。
しかし条件部分がtrueにならないとき、どうしたら良いんでしょうか?
「コピー失敗しました」みたいなアラート表示すべき? そんなことやってますか?
そもそも、上のif文でのチェックは必要なんでしょうか…
条件成立・不成立をどこまでフォローすべきか悩んでいます。
0747nobodyさん
2009/10/31(土) 15:10:42ID:???0748nobodyさん
2009/10/31(土) 15:13:55ID:???それに失敗したらアップロード処理失敗のエラー返すしかなかろ。
0749nobodyさん
2009/10/31(土) 15:30:20ID:???コピー失敗したらそのファイルを削除してメッセージを表示&エラーログを残すとか
0751nobodyさん
2009/11/02(月) 18:13:40ID:uSMOoO6Cphpでmhtmlを出力するほうほうはありませんか?
0753nobodyさん
2009/11/02(月) 18:58:04ID:???http://www.hedgerwow.com/360/dhtml/base64-image/demo.php
0756nobodyさん
2009/11/03(火) 00:57:00ID:OxH3Rb8VPHPの言語仕様として確認したいのですが、
1リクエストごとにstaticメソッドであろうが毎回PHPのリソースをメモリに読み込んで、
レスポンスを返した時点でメモリ破棄する。
そのため、複数のリクエスト間での共有ができず、たとえばDBのコネクションプール
などという考え方は基本ない。であっていますか?
0757nobodyさん
2009/11/03(火) 02:25:30ID:???たいていの言語は、別々に起動された、親子関係
でないプロセス間でソケットを共有する方法は、
言語仕様にはないと思う。
0758nobodyさん
2009/11/03(火) 05:32:26ID:???SpeedyCGIみたいな常駐プログラムを使ったらDBコネクション繋ぎっぱなしできるよね?
それをphpから呼び出したら、プログラム呼び出しののオーバーヘッドとDB接続のオーバーヘッド天秤にしても常駐の方が早い希ガスだけどどうなの?
あと、phpでSpeedyCGIみたいシステムないの?
0759nobodyさん
2009/11/03(火) 10:19:58ID:???MySQLならSQLrelayとか。
0760nobodyさん
2009/11/03(火) 10:39:36ID:???0761nobodyさん
2009/11/03(火) 21:21:41ID:ppv8Lxeqwikipediaで携帯のIPアドレス一覧があって、それを元にアクセスした人のIPが携帯なら携帯用のページに飛ばすのをPHPで以前に作ったんだけど
知らない間に携帯用のIPアドレスが増えてるみたいで、修正しようかと思うんだけど、結局イタチごっこだから
シンプルにユーザーエージェントで分別しようかと思うけどそれだとPCで偽装もできるので
ちゃんと的確に分けられる方法教えて。
0762nobodyさん
2009/11/03(火) 21:23:10ID:???0763nobodyさん
2009/11/03(火) 21:34:29ID:???だから普通にUAで振り分ければいいとおもうが
0765nobodyさん
2009/11/03(火) 23:00:04ID:Hf2P9qWB助けてください
0766nobodyさん
2009/11/03(火) 23:08:14ID:ppv8Lxeqだけど、UAの文字列の一部で携帯かPCかを判断すると、今後携帯キャリアがUAの仕様を変えた時に、
携帯だかPCだか判断できずに、携帯なのにPC用ページを表示してサイズでかすぎて表示できないとかだと最悪でしょ。
妥協してユーザーエージェントでやるとするといくつあるの?
ドコモ、au、ソフトバンク、ボーダフォン、J-PHONE、あと何?
ウィルコムとかイーモバイルとかも固有のUAあるの?ディズニーモバイルは?あとiフォンもある?
0767nobodyさん
2009/11/03(火) 23:42:05ID:???0768nobodyさん
2009/11/03(火) 23:44:16ID:???0770679
2009/11/04(水) 09:18:30ID:???>>720
・・・申し訳ない。
以前あったレスからJavascriptは使わないと決めて
元々記述したJsコードを全部削除してPHPに実装しなおしていましたが
報告忘れてました
>>721
A1とかA2とかは、それぞれupdateでsetする内容が違うだけ。
むしろコレなら変数で勝手に変わる様にしたほうがいいのかもしれないですが・・。
>>722
一応削除はしてます。
>>723
諦めたらそこで終わりじゃないですか??
>>724
はい。実はJavaはやっていたのですが
どうもHTMLやらJavascriptやらPHPやらとくると・・どうにも
0771679
2009/11/04(水) 09:19:55ID:???まだまだ若いですよ。上司には当然教えてくださる方もいないので独学になりますが。
いかんせん会社が大きく無いのでしょうがないです。
>>727
本・・ですねえ。
でも今月はCiscoの本やらいっぱい買ってしもたorz
経費で落ちそうなら考えてみます。
今のところ一応Formタグを追加し、typeをSubmitにして飛ばすようにしてます。
次のphpでname属性から拾ってきたものを取り上げ、PHP側のif分岐等でのマッチング査定をしつつ
その先で上書き処理、という流れで、やっていくつもりです。
0772nobodyさん
2009/11/04(水) 09:50:46ID:???それ、Apacheの問題であってPHPのじゃないじゃん。
<httpd.conf>
AddType application/x-httpd-php .php
PHPIniDir [PHP.iniのあるディレクトリ]
LoadModule php5_module [php?apache*.dllへのフルパス]
書いたらApacheの再起動。
0773nobodyさん
2009/11/04(水) 13:15:10ID:+cyJ/kJvドキュメントルート(サイトのルート)の中の一つのフォルダを完全にPHP使えないようにしたい。
そうしないとそこがアップロード用のファイル保存フォルダになっているので
PHPのファイルをアップされブラウザでファイルをアクセスされると危険。unlink()とかされたら完全に終わる。
かと言ってアップ時に、拡張子が.phpのファイルをはじくとかだとそれも困るし、そのファイルの内容をチェックするのも大変。
.htaccessファイルに、拡張子.phpは.htmlとするように書いてもいいけど.php5とかPHPとして動く拡張子が他にもあるから対処しきれない。
で、特定のフォルダにだけPHPを使わせない機能ないの?
もしくはアパッチでドキュメントルート以外のフォルダを作り、
C:/root_A(PHP可能)
C:/root_B(PHP不可)
として
http://ドメイン/root_B以下にアクセスがあった時はC:/root_B/index.htmlを表示させるとかできないかな?
バーチャルホストじゃなくドメイン同じで二つのルートを使い分けるって事。
0774nobodyさん
2009/11/04(水) 13:18:32ID:+cyJ/kJv同じドライブに複数の人のルートがあると思うけど他人のファイルをunlink()したりできないのは何で?
0775nobodyさん
2009/11/04(水) 13:22:13ID:???PRINT 'マンコ';
}
初めて作ったプログラムがこれ。
0777nobodyさん
2009/11/04(水) 13:31:39ID:???一つはパーミッション。
削除権限はそのファイルが含まれているディレクトリのパーミッションによるが
777とかしてたら消せる。
でもphpだと全ユーザーが同じ実行ユーザーになる場合もあるので
phpのSafeModeを使う。
これは、実行ファイルのオーナー(実行時のユーザーではない)が
他のオーナーのファイルをいじれなくする仕組み。
■ このスレッドは過去ログ倉庫に格納されています