【PHP】下らねぇ質問はID出して書き込みやがれ 93
質問者はまず
>>1 を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは
>>2-10 辺り
次スレは
>>980 が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 92
http://pc11.2ch.net/test/read.cgi/php/1263035502/ ◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
【簡易FAQ】
1.文字コードは何を使えばいいの?
→1.UTF-8 2.EUC-JP のどちらか。迷うようなやつはShift_JISは使っちゃダメ。
2. このスレに書き込むときに自分のサイト名を晒したくない
→
http://example.com/が例文などのために予約されている 。hogehoge.comは使っちゃダメ。
3. ブラウザに何も表示されないんだけど・・・
→ Apacheの設定を見直せ。ファイルの拡張子は何にしてて、その拡張子でPHPを呼ぶようになっているか?
4. 記号の意味がわからないけどググりようがない
→ 「@」 エラー表示を抑制、「->」 オブジェクトのメンバにアクセス、「::」 静的なメソッド呼び出し、
「==」は暗黙の型変換をしてゆるい比較、「===」は型情報も含めた厳密な比較
5. echo "$arr['hoge']['fuga']"; と書いたらエラーになった
→ {おっぱい括弧}でくくって"{$arr['hoge']['fuga']}"にする
6. 一定時間ごとに自動的に何かしたいんだけど
→ cronかタスクスケジューラを使え。
7.extractって危険なの?
→変数上書き&初期化忘れなどで危険。楽だからという理由だけで安易に使わない。
8. include/requireに「〜.php?a=b&c=d」のようなパラメータをつけたい
→ URL呼び出しなら可能だけど、普通のファイル呼び出しではできません
9.include/requireでURLを指定しても何も起きない
→ .phpの拡張子のファイルをURLで呼び出すと、1度PHPプログラムとして実行された結果になる。
10. そもそもインストールの時点でうまくいかない
→ 確認すべきはPHPのconfigureの引数、php.iniの内容と置き場所、
Webサーバの設定(Apacheならhttpd.conf)、起動&再起動あたり
11. SQLの質問はどこで?
→ データベース板に誘導されるのが嫌ならPHPにうまく関連させて質問する
12. 文字列のなかに、英字のみとか数字のみとか記号が入っちゃいやんとかはどうしたらいいの?
→ ctype_〜()が手軽。複雑なパターンはpreg_〜()あたりで正規表現を使う。
13. $a1, $a2, $a3 ... のような変数名をうまく扱いたい
→ 可変変数で実現できるけど、むしろ配列を使って$a[1], $a[2], $a[3]等とするのがベター
14. echoとprintってどう違うの?
→ よく議論される話題であるが基本的に両者とも同じ。 以下ちょっとした議論。
http://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40 15. クッキーの情報をユーザから隠したい
→ セッション使え。ただしクッキーとセッションは仕組みが違うから同じように扱うな
16. strip_tags()で削除しないタグを複数指定したい
→ strip_tags($html, '<a><p><font>'); // htmlspecialchars()も検討すべし
17. CSVやTSVのファイルをスマートに扱いたい
→ まずはfgetcsv()。ただし日本語を含むと正常に動作しない場合があるので注意だ。
18. 値渡しと参照渡し(「&」を使う)のパフォーマンスの違い
→ C言語じゃないので、パフォーマンス目的で使いわけたらダメ。参照渡しにすると逆に遅くなったりする
参照渡しは引数に戻り値を設定したり引数を関数内で変更するなど、正しい目的に使うこと
19. ファイル入出力関数(fopen等)でリモートファイル(
http:// 〜とか)を扱う際の限界
→ fsockopen()でソケット通信 or PEARのHTTP系 or CURLで解決
必要ならHTTPをはじめとする各種プロトコル(どんなデータを送受信するか)はRFCなどで調べる
20. PHPからPOSTリクエストしたい
→19.を参照
21. 画像処理一般 or GDの限界
→ ImageMagick(PECLのやつ or シェルから実行)
22. 画像・音・動画はファイルで保存?DBに保存?
→ 好きにしてください
6 :
862 :2010/02/15(月) 20:10:24 ID:tuS5GRdx
なんでブログで話し言葉なんだろね
8 :
nobodyさん :2010/02/16(火) 06:25:59 ID:iRRBilsA
mail()関数を使ってるんですが、メールが送られてきません
echo "mail>". mail('
[email protected] ', 'My Subject', 'hohoho subject');
としたところ 「mail>1」と出力されたんですが、メールは送られてきません
どこを修正したら良いんでしょうか? phpというよりOS周りの問題になるかもしれませんが
よろしくお願いします。
centOS5.3 php5 サーバーは自宅サーバです。
ためしにコマンドラインで
% sendmail
[email protected] From:
[email protected] (あなたのメールアドレス)
To:
[email protected] Subject: This is test mail.
(ここに空行を入れる。ここまでがヘッダ。ここから先がボディ)
メールの内容
.(ドットのみの行を入力すると終了)
を実行してもメールは送られてきませんでした
(x68000.q-e-d.net/~68user/unix/pickup?sendmail このページを参考にしました)
アドバイスよろしくお願いします
くだらない質問なんですが、
xxxxx.php をLinuxサーバ上でデザインを弄くったりしてちょっと確認するためにバックアップを例えば
xxxxx.php.20100216.0717 とするとしますね。
ところがこれは
http://xxx/xxx/xxxxx.php.20100216.0717 としてPHPが動作してしまいます。
PHPとして動作させないための設定ってありませんか?
>>9 少し趣旨が変わっちゃいますが、ウチはSubversionとかで管理してみては?
そんなに大きなプロジェクトじゃないなら大げさすぎますが。
>>9 phpはデフォルトだと拡張子がphpであるときのみしか動作しない
これはApache側の設定で行われている
なのでそれで動くはずはない
アクセスできたとしてもただのPHPのソースが表示されるだけだと思われ
headerでtext/plainと明示しない限りtext/htmlで出力されると思うので
<? ?>がxml宣言と解釈され何も表示されてないのをphpが実行されたと勘違いしてると思われ
htmlのソース見ればphpのソースが丸ごとでてくるなんてことはないか?
それでもきっちり確認してるんだなww
代理まで頼むとは・・・しかも意味わからんし
15 :
nobodyさん :2010/02/16(火) 14:25:19 ID:PEPOZ1Ss
execで別PHPを実行する時に関数を指定することはできますか? exec.php exec("/var/www/html/test.php"); test.php echo "test"; function test1(){ echo "test1"; } これだとtestと表示はされますがtest1とは表示されません。 関数を指定出来る方法があればおしえてください。
>>8 CentOSのコマンドラインから送信できないのであればCentOS側の設定の問題
SELinuxの設定
今ならOP25B対策の設定をしていないとか
その次はiptablesの設定
Linuxのコマンドラインから送信出来るようになった後にPHPから送信できなければPHPの
設定ファイルの確認
>>15 includeなりrequireじゃダメなの?
require_once "/var/www/html/test.php";
test1();
18 :
15 :2010/02/16(火) 14:54:27 ID:PEPOZ1Ss
>>17 別の人間が作ってて、何やら変数名やら色々な部分が被っているようで
includeしたらえらいことになってしまいました。
なので出来ればexecあたりで別物として扱えればいいなと。
変数名を統一した方がいいのはわかってるんですが、なにぶんあっちのコード書いた
人間がもう不在なので出来るだけ変更はくわえたくないな〜というのが・・・。
過去ログみてたらexecで引数をいくつか渡せるみたいなので
exec.php
exec("/var/www/html/test.php" test1);
test.php
echo "test";
if(argv[1] == "test1"){
$argv[1]();
function test1(){
echo "test1";
}
}
みたいな感じにしてみようかと思います。
もしかしたたらもっとスマートなやり方あるのかもしれませんが・・・
>>18 それだとtest.phpに思いっきり変更加えているように見えるけど・・・
functionだけの問題なら、test.phpからfunctionだけコピーそて
別ファイルにしたほうがいいんじゃないか?
20 :
15 :2010/02/16(火) 15:03:07 ID:PEPOZ1Ss
>>19 これくらいの変更が限界かな〜と・・・
このfunctionだけコピーしても色々と参照してるみたいでうまく機能しないという・・・
とても汎用性のないコードを書いてくれたもんで困ってました。
さすがに書き直す時間はないしこの変が妥協点かなと・・・
プログラムわからん人にも簡単に書き換えられる=汎用性がある だと思ってんのか
変数名がバッティングするってことは 汎用性のないコードを書いたやつとレベルが同じということにはならないのだろうか
>>12 よくわからんが、あなたがキチガイっぽいのが分かった。
24 :
8 :2010/02/16(火) 18:36:18 ID:iRRBilsA
>>16 ありがとうございます、OSの設定から見直してみます。
phpから離れた話題で申し訳ないのですが、
最近よく言われるsendmailよりpostfix,qmailの方が良いというのは
こういう送信失敗トラブルもそちらのほうが解決しやすいということが
あるのでしょうか?
スレ違いだが、sendmailは設定が面倒なだけ。
sendmaikl.cfがスラスラ読み書きできるならそれはそれでいいw
>>10-11 ありがとう。Apacheの設定も気になりますけど、中身が見えてもダメなんで、結局別ディレクトリにmvしますかね・・。
>>9 でやった変更は自サイトのCSSを変えてサーバでチェックとかそんなんですのでここでSVNはちょっとw
>>27 そういうときは拡張子を統一して.htaccess(Apacheの設定)で
外からのアクセスを受けないようにすればいい
例えばxxxxx.php.20100216.0717の後に.backupってつけて
xxxxx.php.20100216.0717.backupっていうファイルにして
<FilesMatch "\.backup$">
Order allow,deny
Deny from all
</FilesMatch>
スレ違いだけどこんな感じか
【OS名】linux 【PHPのバージョン】php5 【連携ソフトウェア】mysql 【質問内容】 自分のレンタル鯖に指定したURLのファイルをPHPを使ってダウンロードさせて保存させるのは可能でしょうか?
可能です
つか指定の拡張子以外でスクリプト走ってしまうとかスルーしていいのか? ちゃんと対応しといたほうがいいと思うぞ
>>31 httpd.confの
AddHandler php5-script .php
がおかしいみたいです。これを消して再起動するとxxx.phpもxxx.php.20100216も実行できずソースのテキストそのものが出てきます。
でも
>>28 さんの方法で解決したのでここはまあいいじゃないですかw
いろいろありがとうございました。
【OS名】レンタルサーバ 【PHPのバージョン】php5.26 【質問内容】 class foo { static $cash=array(); function foo($id){ if (self::$cash[$id]) return self::$cash[$id]; SQLとかごにょごにょ; self::$cash[$id] = $this; } } という風にキャッシュを行おうとしていますが、2回目以降の生成で空のプロパティを持ったオブジェクトが帰ってきてうまくできません。 これは言語仕様としてうまくいかないものでしょうか? それとも、他の部分(とくにごにょごにょの部分)に原因があると見るべきでしょうか?
テンプレは使うのにスレタイ読まない人っていったい・・・
35 :
33 :2010/02/17(水) 02:38:09 ID:9AFUUUC4
あああああああああ 専ブラでいつもsageっぱなしの癖が出てしまいました 申し訳ありません。
static $cashはfunctionの中じゃね? あと$cashじゃなくて$cacheじゃね?
ごにょごにょな部分に原因があるかもと予想しておきながらそこを外して試さない人っていったい・・・ まぁそれは冗談だけど以下参考までに <?php class Test{ public static $my_static = 0; public function addN($n) { self::$my_static += $n; } } $a = new Test(); $a->addN(1); var_dump($a::$my_static); $b = new Test(); $b->addN(1); var_dump($b::$my_static); 結果: int(1) int(2)
38 :
nobodyさん :2010/02/17(水) 03:19:21 ID:9AFUUUC4
>>36 確かにそうですね・・・cashでは現金の方になりますね
指摘ありがとうございます。
javaをやっていたせいだと思うのですが、
関数の中に入れると気分的になんか嫌なんです・・・
入れないとデメリットが生じるものなのですか?
>>37 やっぱり残るものですよね
static function getInstanceとかやるべきなんでしょうか
他のソースに手を入れる事になるので、コンストラクタの中でやってみようと思ったのですけど
PHP で Firefox アドオンの Stylish みたいなことをしたいです。 file_get_contents で取得して、 head の css のリンク部分だけ変えてるのですが、 もっとスマートな方法ってありますか?
ないよ
>>38 コンストラクタでキャッシュを返してるつもりだけど
コンストラクタはインスタンス生成後に自動的に呼ばれるただのメソッド
なのでそのコードだと毎回新しいオブジェクトを作成して
キャッシュがあれば初期化しない、になってしまってる
やるなら言う通りstaticなファクトリメソッドか、別にキャッシュを返すクラスを実装するべきだね
42 :
nobodyさん :2010/02/17(水) 14:46:58 ID:9AFUUUC4
>>41 生成されたインスタンスがどこにいくのだろうと思って調べてみたところ、
コンストラクタでの返り値は無視されるというのが見つかりました
キャッシュを返せないわけですね
素直にgetInstanceを実装してきます。
返答してくださった方々、ありがとうございました
アクセスからODBC経由でデータ取り出したんだけど、 これってUTF-8で取り出せないかな? 文字化けしちゃうんだよね アクセスが糞っていうのは承知でお願いします。
mdbをODBCで読んでるってこと? 文字化けの原因を調べて対処すればいいだけじゃないの?
45 :
43 :2010/02/17(水) 18:48:40 ID:???
解決しました 自分が糞でした
解決したら、その理由を説明しろよ。 糞でも。
まあテンプレに無いことを強要することもあるまいよ
48 :
43 :2010/02/17(水) 20:24:31 ID:???
>>44 ODBCドライバ事態がSJISでやりとりしてるぽくて、
取り出した時点で一部の文字が?になってる。
だから文字コードを変換しても意味が無いみたい。
ちなみに外国語なんだけど、mdb上ではちゃんと格納されてるです。
mdbのデータ型はメモ型です。
>>45 自分が糞ならがんばって肥料くらいまでにはなりたい
>>46 肥やしになれたら報告します
49 :
nobodyさん :2010/02/17(水) 23:02:50 ID:lyRzhjAY
php4.4
file_get_contentsの引数なのですが下記Basic認証file_get_contentsするソースで
Warning: file_get_contents() expects at most 2 parameters, 3 given in /path/to/hoge.php on line 23
とエラーが表示されます。
http://jp.php.net/manual/ja/function.file-get-contents.php を見ると4と5でストリームコンテキスト?の可否があるようなのですが、4.4上で下記の代替え方法はありますでしょうか?
$params = "status=". rawurlencode($message);
$result = file_get_contents($url.$params , false, stream_context_create(array(
"http" => array(
"method" => "POST",
"header" => "Authorization: Basic ". base64_encode($username. ":". $password)
)
とりあえず、49が代替を「だいがえ」と読んでいるは判った。
PECLとPEARというライブラリ群がありますが、現在ではどちらが主流なんでしょうか?
どちらも主流ではないがPECLのほうが新しくて速い 古いPEARのほうがライブラリは多い(=できることが多い)ので完全に代替には至ってない ていうかスレタイ嫁
>>49 $ch = curl_init();
$post = array(
//POSTするデータ
'status' => rawurlencode($message),
);
$option = array(
CURLOPT_URL => "
http://example.com/ ", //URL
CURLOPT_RETURNTRANSFER => true,
CURLOPT_BINARYTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "POST", //POSTメソッド
CURLOPT_POSTFIELDS => $post, //POSTで送られるデータ
CURLOPT_HTTPAUTH => CURLAUTH_BASIC, //認証方法
CURLOPT_USERPWD => "example:password", //パスワードとユーザー名を"[username]:[password]" 形式で指定
);
curl_setopt_array($ch,$option);
echo curl_exec($ch);//結果を出力
cURLならこんな感じ、実際に動かしてないからミスがあるかもしれない
「代替」は「だいたい」と読みます
だいたい合ってる
大体は違いますか?
57 :
49 :2010/02/18(木) 03:10:20 ID:+u9lCEUS
>>53 だいたい方法ありがとうございました
いただいたコードでcurl_setopt_arrayがバージョン5.xが必要でしたが関数名でぐぐったところ
http://php.plus-server.net/function.curl-setopt-array.html 見事に下位互換するコードがありました。助かりました!一応転載しておきます
ーーーー以下転載ーーーーーーーーーー
PHP 5.1.4 より前のバージョンでこの関数と同等の操作をするには、次のようにします。
例2 curl_setopt_array() の独自実装
<?php
if (!function_exists('curl_setopt_array')) {
function curl_setopt_array(&$ch, $curl_options)
{
foreach ($curl_options as $option => $value) {
if (!curl_setopt($ch, $option, $value)) {
return false;
}
}
return true;
}
}
?>
ちゅいません!教えてください! えーと、 phpのDOMで、 $sl->setAttribute( 's', $name ); みたいに使いたいんですが、 $nameに日本語入れると、受け手で文字記号になってしまいます>< どうすればいいのでしょうか?!
ふう・・・ やっと規制がとけたぜ
FEZばっかやってないで働けニート野郎
63 :
EM114-48-53-20.pool.e-mobile.ne.jp :2010/02/18(木) 13:33:22 ID:JDgmKlSP
さっさと質問かけよキチガイども
64 :
nobodyさん :2010/02/18(木) 18:20:59 ID:XBktE18D
レンタルサーバーのHTMLでリファラーを取りたいのですが、 HTMLページで<img scr="<URL>">を埋め込んだところ、imgタグを貼ったURLが取得されてしまい、 そのページのリファラが取得できません。 うまく取得する方法があったら教えてください
無理
66 :
nobodyさん :2010/02/18(木) 18:23:49 ID:XBktE18D
金も時間も気分の余裕もない
67 :
nobodyさん :2010/02/18(木) 18:24:43 ID:XBktE18D
やはり無理ですねorz ありがとうございました
68 :
nobodyさん :2010/02/18(木) 18:26:28 ID:NVBHLzZ0
サイト全体を縮小画像で表示しているサイトとかありますが、あれはどういったモジュールを使っているんでしょうか?
69 :
EM114-48-61-7.pool.e-mobile.ne.jp :2010/02/18(木) 18:28:36 ID:1SIrdwKU
>>64 今時のレンタルサーバならPHPぐらい使えるだろzk
そんなPERL時代の名残みたいな事しないでPHPの$_SERVERでとりゃあいいだろクズ
PERL(笑) 中卒は帰れ^^;
何が中卒だ粛清するぞコルァ
>>64 JavaScriptで取得したリファラを、JavaScript上に記述したimgタグに埋め込んだPHPのURLに渡す。
uzee
htmlsql使ったことのある方におたずねしたいのですが、相対URLを絶対URLにはどうしたらよいのでしょうか?
78 :
nobodyさん :2010/02/19(金) 02:45:59 ID:rkYeDCsT
PHPでログイン認証やセッション管理を実現する場合、標準的な方法ってありますか? session_start()というメソッドがありますが、これをベタに使うことはあまりないのかな? セッション管理関連のモジュールがあれば教えていただけないでしょうか
>>78 認証に関しては、自前で作成・フレームワークの機能・PEAR::Authあたりかな
標準的というのは無いよ。
>>78 標準で用意されているセッション関数を利用してください
自前で用意するとセキュリティ上の問題が起こるかもしれません
81 :
78 :2010/02/19(金) 12:04:46 ID:rkYeDCsT
>>79 >>80 丁寧にありがとうございます。
フレームワークは使う予定が無いので、組み込みのセッション関数とPEAR:Authを検証して決めたいと思います。
pear:authなんて使うな
理由くらい書けよ
PHPの標準関数はCで書かれたバイナリ、 pearに限らず外部のライブラリはPHPで書かれたスクリプト。 圧倒的にバイナリのほうが高速に動くので標準関数だけでは出来ないことがある場合のみライブラリを使う方が良い
たまにはいいこと言うね
標準関数組み合わせて認証の仕組みを作ったのがAuthなんじゃないの? 結局同じようなモノを作る羽目になると思うけど あとPECLはCだよね。
外部ライブラリもフレームワークも使いまくって良いよ。
勉強目的以外で車輪の再発明は無駄
>>84 の所は毎回標準関数だけで開発してるのか?
違うだろ?フレームワークとか自社のライブラリ的なモノ使ってるだろ?
>標準関数だけでは出来ないことがある場合 例えば?
>>88 いろんなソートのアルゴリズムの実装
標準関数のsortはアレなので
>>89 いや理由もなしにpear否定されても困るだろ
>>92 あなたが何を言いたいのか意味がわからない
IPってIPアドレスのこと?
IPhoneの事だよ
なんだIPhoneか。 会社的にそれ持ったら殺されるわ。
PHP使ってるというと馬鹿にされるからあまり言わないほうが良いと 教授や講師に言われたけど、PHPってそんなにお笑い言語なの? PHPはweb入門の登竜門として考え慣れたら他の言語に移れと言われたけど PHPはGREEとかでも使われてるし謎です
ここってID出さないといけないのか・・・
ID出すわけにいかないので
>>96 は無視して下さい
他のところさがして聞いてきます
ID出すってそんなに危険なのか
●必須スキル webアプリ経験:4年以上 PHP経験:2年以上 携帯開発経験 ●単価 MAX40万[150-210h]
100 :
nobodyさん :2010/02/19(金) 15:34:35 ID:ImlyfveR
【OS名】xp pro
【PHPのバージョン】5.2.9
【質問内容】
スレチだったら申し訳ないのですが・・・
isleのサーバーに移転することになったので、isleのコントロールパネルにて旧サーバーからディレクトリコピーツールを使用しました。
移転先プレビューサーバにて確認してみたところphpが表示されず500エラーが発生しました。
info.phpでテストしてみたところ
・ホームディレクトリ直下のphpファイルは正常動作する
・ホームディレクトリに作成したフォルダ内のphpファイルは動作しない (ex.
http:// 〜〜〜/test/info.php が動作しない)
・動作しないphpについてはソースの中身は関係ない模様(htmlのファイルの拡張子をphpに変えただけでも動作しなくなる)
・php以外のファイル(html,csv)はディレクトリがどこでも正常に動作した
・問い合わせたところ、phpのバージョンが4になっているので動作しないとのこと
・旧サーバーはPHP4 新サーバーはphp5 に対応
ホームディレクトリ以外のphpファイルは動作しない設定になっていると思うのですが、どう設定すればいいのでしょうか?
>htmlのファイルの拡張子をphpに変えただけでも動作しなくなる この動作しないというのはどういう状態?エラーかなんかが出てる?
102 :
100 :2010/02/19(金) 15:46:24 ID:ImlyfveR
>>96 そういう偏見をもつ人間が先生なのか、かわいそうだね
PHPは道具にすぎないのだから別にお笑い言語でもなんでもないよ
使い手が生かせるか生かせないかだろ
>>100 変な .htaccess を置くと500エラーが出るよ。
<FilesMatch "\.php$">〜</FilesMatch> とか
AddType, AddHandler 辺りがどうなってるか確認。
106 :
100 :2010/02/19(金) 17:15:21 ID:ImlyfveR
>>101 >>105 ご指摘の通り 旧サーバーから移行されていた .htaccess が原因だったようです。
修正をかけて正常に動作するようになりました。
ありがとうございました。
くだらない質問なんですが、\←これをメモ帳で打つと¥になり、コピペしても¥に置き換わります。 どうしたら解決できますか?
まずパソコンのコンセントの挿し方から教えてあげようか
社長に騙されてトンデモなプロジェクトに放り込まれた 絶対に許さない
¥キーを押して$になったら大変だろjk
このスレの有名人ランキング 正規表現クン OCN k.k.projects チンピラ
116 :
nobodyさん :2010/02/20(土) 15:21:08 ID:21d3TBtu
mysqli の bind_param と bind_result がネックで汎用化が難しいのですが、 何か良い案ありますか? 呼び出し側は、 executeQuery($db, $sql, "ss", array($id1, $id2), array("", "", "")); みたいな感じにしたいです。 今は、引数の数ごとにswitchで分岐して、bind_param()とbind_result()を処理してます。
119 :
116 :2010/02/20(土) 15:58:33 ID:21d3TBtu
>>117 例えば引数が3つあった場合、
$stmt->bind_param("sss", $value1, $value2, $value3);
みたいな感じに書く必要があるので、
ループで処理できないんです。
「$value1, $value2, $value3」の部分を配列から作ることができれば良いのですが。
なので今は、下のようにしようかどうか。。
$count = count($param);
switch ($count) {
case 0: break;
case 1: $stmt->bind_param($paramType, $param[0]); break;
case 2: $stmt->bind_param($paramType, $param[0], $param[1]); break;
case 3: $stmt->bind_param($paramType, $param[0], $param[1], $param[2]); break;
:
>>116 phpのマニュアルにはUser Contributed Notesってのがあってだな
121 :
116 :2010/02/20(土) 17:03:43 ID:21d3TBtu
>>120 おおー、ありがとうございます!
call_user_func_array(array($stmt, 'bind_param'), $paramList);
で、うまく行きました。
ただ、結果取得の方はできないです。。。
call_user_func_array(array($stmt, 'bind_result'), $outputList);
これはDBじゃなくて、
どちらかと言うと call_user_func_array() の使い方の問題ですね。
とりあえず真面目に質問したいなら。。。 とかやめれ
123 :
116 :2010/02/20(土) 17:21:04 ID:21d3TBtu
はい、失礼しました...
124 :
nobodyさん :2010/02/20(土) 17:26:44 ID:hFwUs/sv
【OS名】Windows 7 【PHPのバージョン】php5.30 【質問内容】 for ($i=1; $i <=3; ++$i) { $変数 = $i } といった具合にスクリプトを書いて、$a1=1,$a2=2,$a3=3のようにしたいのですが、$変数の部分はどのように指定する倍医のでしょうか?
for ($i=1; $i <=3; ++$i) { $変数.$i = $i }
なぜ前置加算なんだろう
127 :
nobodyさん :2010/02/20(土) 17:47:40 ID:hFwUs/sv
for ($i=1; $i <=3; ++$i) { $a.$i = $i; } echo $a1; とやってみたのですが、$aが定義されていないと3回出て、そのあと$a1が定義されていないと出てしまいます。
正しくはこんな感じ $’a’.$i $”a$i” ${’a’.$i} ${”a$i”} お好きなのをどうぞ
>>128 実行するまでもなくPDTでエラーが...
PDTって可変変数対応してねーの?
1,2こ目はエラーじゃね?
中括弧で囲めってこったな
PHPには関数内でstatic変数を定義できる機能がありますが、 これはクロージャで実装されてるのでしょうか? グローバル変数と違って名前空間を占有しないのにどこかに静的に保存されている、というのが 気持ち悪いのですが実際はどうやって保存されてるのですか?
134 :
nobodyさん :2010/02/20(土) 20:35:05 ID:bS4gzLF5
【OS名】Windows XP Professional SP3 【PHPのバージョン】PHP 5.1.4 【連携ソフトウェア】Apache 2.2.2、MySQL 5.0.21 【質問内容】 rarファイルやzipファイルの中の先頭の1ファイルを抜き出して、サムネイル表示するスクリプトを作成したいと思っています。 そこで現在、PECL::zipやPECL::rarを用いて圧縮ファイルを解凍した後、先頭の1ファイルを取得して、 phpThumbnailerなどのクラスを使ってサムネイルを作成し、解凍したファイルを削除する、という方法を考えています。 しかし、圧縮ファイルを全て解凍すると、時間がかかりすぎてしまします。 解凍せずに、先頭の1ファイルを取得して、そのサムネイルを作る方法はないでしょうか。 過去スレは81〜93(現行スレ)まで"サムネ"で調べました。 該当件数は11件で、同じような質問が過去スレ91の892番にありましたが、解答はありませんでした。 よろしくお願いいたします。
>>134 pecl::zipってZipArchiveでいいんだよね?
前提の質問だけどextractToで特定のファイルを指定して解凍した時でも全てのファイルが解凍されるの?
今年こそCMS作る
CMSほどいらんもんないわ
URLに渡された引数の取得方法はいくつかありますが import_request_variables は想定外の変数が作られてしまいますし 今のところ $input = $_POST + $_GET; のように取得してます。(GETの重複キーが無視されるのは想定内) 我流なので少々自信ないのですがこれで特に問題ないでしょうか。 もっと適当なやり方があったら教えてもらえませんか。
139 :
138 :2010/02/21(日) 12:00:41 ID:ek+ZaY/s
すいませんsage消し忘れました。
140 :
nobodyさん :2010/02/21(日) 13:33:50 ID:j6dUsmZ9
すんません phpさわってみたいんですけど、まず何を作ってみればいいんでしょー?
まずは環境を整えろ
142 :
nobodyさん :2010/02/21(日) 13:42:28 ID:j6dUsmZ9
環境というのはXAMPPとかでよろしかったですか?
もち
【OS名】FreeBSD 7.0-RELEASE-p4 【PHPのバージョン】5.2.6 CGIとしてインストールされているPHPでリクエストヘッダを取得するにはどうしたら良いですか
145 :
nobodyさん :2010/02/21(日) 14:23:56 ID:xi+RS687
【OS名】FreeBSD 7.0-RELEASE-p4 【PHPのバージョン】5.2.6 CGIとしてインストールされているPHPでリクエストヘッダを取得するにはどうしたら良いですか
147 :
nobodyさん :2010/02/21(日) 15:29:51 ID:xi+RS687
>>146 それだとDigest認証のヘッダが取れないのよ
【OS名】Windows 7
【PHPのバージョン】php5.30
【質問内容】
<?php
mb_language("Japanese");
mb_internal_encoding("UTF-8");
$to = "
[email protected] ";
$from = $_POST[$mailaddress];
$name = $_POST["name"];
$subject = $_POST["subject"];
$body = $_POST["message"];
$header="From:" .mb_encode_mimeheader($name) ."<".$from .">";
if (!mb_send_mail ($to , $subject , $body , $header)) {
exit ("メールの送信に失敗しました。");
}
?>
上記のものを記入項目のチェックして、メール送信するようにしたいです。
現在は、全未記入でもボタンを押せば送信出来てしまいます。
しかも、メールアドレスを記入しても、受信メールの差出人には送信者メールアドレスが表示されなく、
名前だけが表示されてる状態です。
知らんがな
うーん Javascript使えばいいんじゃないかな
152 :
nobodyさん :2010/02/22(月) 02:35:06 ID:XuPCMsF+
153 :
nobodyさん :2010/02/22(月) 16:01:26 ID:0poMcZJI
フレームワーク使わない場合、フォームってどうやって処理するのが一般的ですか? pearのQuickForm使うしかない?
154 :
nobodyさん :2010/02/22(月) 16:08:04 ID:WTPjegwI
【OS名】Ubuntu 【PHPのバージョン】php5.2.6 【質問内容】 PHPで送信するメールにデジタル署名を付加したいのですが可能ですか? 証明書は既に持っています
可能
すみません。しつもんなんですが、文字列の連結で + と . はどう違うんですか。 + だとうまくいかないんですが。
わかりました サンクス
wordpressをインストールしようとしたら、以下のようなエラーが出ました。 ページ内容自体はきちんと表示されているのですが、 そのまま進めてしまってもいいのでしょうか。 Warning: Cannot modify header information - headers already sent by (output started at C:\xampplite\htdocs\wordpress\wp-config.php:1) in C:\xampplite\htdocs\wordpress\wp-admin\install.php on line 36
160 :
nobodyさん :2010/02/22(月) 19:26:44 ID:1u7xPt7x
質問時のID表示忘れてましたすいません
161 :
nobodyさん :2010/02/22(月) 19:53:52 ID:1u7xPt7x
再インストールしたらうまくいきました どうもお騒がせしました
162 :
nobodyさん :2010/02/22(月) 23:32:40 ID:710QNmvk
これが 1 2 でないのはなぜですか <?php $A[0] = 1; $A[1] = 2; $B = &$A[1]; $C = $A; $C[0] = 3; $C[1] = 4; print_r($A); //←この出力は? ?>
163 :
nobodyさん :2010/02/22(月) 23:34:46 ID:710QNmvk
これは 1 2です。 <?php $A[0] = 1; $A[1] = 2; //$B = &$A[1]; $C = $A; $C[0] = 3; $C[1] = 4; print_r($A); //←この出力は? ?>
$Cに参照代入してないからだろ
165 :
nobodyさん :2010/02/22(月) 23:38:39 ID:710QNmvk
自己解決。 いったんリファレンスされた場所は、無条件でリファレンスされるようですね。
一度リファレンスしたらもう外すことは出来なくなるんですか。 関数で1回でも参照渡ししたら、気づかないうちに、コピーしたつもりがリファレンスだったりするんですか。
unset($B); したら配列内の参照は解除されるがこの挙動はきもいな 副作用のある代入なんて聞いたことないし バグレポート出して回答貰ったほうがいいかと
そのphp5で書いたソースを変更した方が楽だろ
php5用のコンパイラとソースがないんですが。 4までしかない
公式の最終リリース日と5に対するコメントから察しろ
5対応の別のコンパイラ使えばいいじゃん
スクリプトエンジン埋め込みではないphpコンパイラ発見。5対応でネイティブコードはいてるっぽい 詳細は後に Roadsend PHP
HipHopの誕生
我々はPHPのソースコードを直接C++に変換した後にネイティブのマシンコードに変換することを考えました。
PHPをコンパイルする事も新しいアイデアではありません。RoadsendとphcはPHPをCにコンパイルし、 QuercusはPHPをJavaにコンパイルし、 Phalanger はPHPを.Netにコンパイルします。
http://blog.candycane.jp/archives/275
PHPをコンパイルして何に使うんだろ
実行速度は速くなっても起動にかかるコストが増大するな
PHPをすべての開発の中心に据える。 そうすると、PHPの経験が豊富になり、web開発の期間も減らせる。
結局、ベタに書いた方が速いでござるの巻
拡張モジュールは速度出ることはしってるだろ。 基本的な関数のほぼ全てはC言語でコンパイルされている拡張モジュール。
【OS】:windowsXP
【server】:xampp apache
【PHPのバージョン】php5.26
「
http://localhost/naotan 」 と 入力したら
「C:/xx/yy/naotan/index.html」 を表示、且つ下位フォルダも表示したかったので
apacheのconfファイルに下記のように記述しました。
AliasMatch ^/naotan(.*) "C:/xx/yy/naotan$1"
<Directory "C:/xx/yy/naotan*">
Options Indexes FollowSymLinks MultiViews Includes ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory>
「
http://localhost/naotan 」でindex.htmlは表示されるのですが、
「C:/xx/yy/naotan/index.html」 の中で 「C:/xx/yy/naotan/famifami」フォルダにある
iframe.phpをiframeで呼び出せなくて困っています。
タグ:<iframe src="./famifami/iframe.php"></iframe>
エラーの内容な下記の通りです。
Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0
Fatal error: Unknown: Failed opening required 'C:/hogehoge/xx/yy/index.html' (include_path='.;C:\xampp\php\pear\') in Unknown on line 0
下記サイトなどを参考にやっているのですが、いまいち分かりません。
http://pub.ne.jp/tokuhama/?entry_id=1537812 apacheの設定と言うより php.ini の問題でしょうか?
php pear でググってみましたがわかりませんでした。
助けてください。お願いします。
182 :
nobodyさん :2010/02/23(火) 19:29:44 ID:AlbSZOXa
includeするのと明示的なファイルオープンだと速度はどのくらい違う? includeは読み込み量とか指定できないけど
>>182 明示的なファイルオープンって何?
fopen?
184 :
nobodyさん :2010/02/23(火) 19:39:41 ID:AlbSZOXa
そうそう。たとえば500Kのテキストを、PHPのコードに書き込んだのと、fopenでロードするのは 速度的にちがいはあるのかなと。
fopenってincludeの代替になりうるもんなの?
ああごめん、よく読んでなかった。 まぁそんなこと自分で試してみればいいんじゃね。
187 :
nobodyさん :2010/02/23(火) 19:48:44 ID:AlbSZOXa
テキストロード、データロードするだけなら同じに使えるんでは。
PEARってもう時代遅れなの?
いんや?
PEARって品質が一定でない気がしてる。 boostのように目玉ライブラリもない気がする。 一度、整理してセットにしてリリースしたらいいと思う。
なんか勘違いしてるんじゃ
PHPを覚えたい初心者です! ザンプはインストールしましたが、そのあと何やっていいかわかりません!!! とりあえず、人のPHPのソースでも見て覚えようと思ったのですが、 なにかPHPスクリプト(言い方あってる??)がたくさん置いてあるサイトとかあったら教えてください!!
そういうのを自分で(こういうところで聞かず)自分で探せることが そういうサイト見ることよりずっと必要なスキルだと思うよ。
あとスレタイを読むスキルもね
196 :
テキサゴン :2010/02/23(火) 22:29:03 ID:???
こんにちは とあるレンタルサーバ(xrea)で 入力フォーム→メール及びデータベース みたいなアプリケーションを実装してるんですがメール送信が不安定で 使い物になりません。信頼性をあげるにはどのようにすればよろしいでしょうか? いまは mb_send_mail(~); だけでメールを送信しています。チェック機能とかつければいいんですかね?
197 :
テキサゴン :2010/02/23(火) 22:30:14 ID:???
すみません忘れてました 【OS名】レンタルサーバのxrea 【PHPのバージョン】php5 【連携ソフトウェア】mysql 【質問内容】 こんにちは とあるレンタルサーバ(xrea)で 入力フォーム→メール及びデータベース みたいなアプリケーションを実装してるんですがメール送信が不安定で 使い物になりません。信頼性をあげるにはどのようにすればよろしいでしょうか? いまは mb_send_mail(~); だけでメールを送信しています。チェック機能とかつければいいんですかね?
198 :
nobodyさん :2010/02/23(火) 22:30:55 ID:J7ajNcTG
【OS名】レンタルサーバ(CentOS 4.6と記述されてました) 【PHPのバージョン】5.2.5 - SafeMode 【連携ソフトウェア】SQlite 【質問内容】 <?php $link = sqlite_open('sample.db', 0444,$sqliteerror); if(!$link){ die('接続失敗'.$sqliteerror); } $x = mt_rand(1,3); $sql = "select * from gyosegaku where rowid = {$x}"; $result = sqlite_query($link, $sql, SQLITE_ASSOC, $sqliteerror); if(!$result){ die('クエリ失敗'.$sqliteerror); } $rows = sqlite_fetch_array($rsult, SQLITE_ASSOC); … というプログラムで Warning: sqlite_fetch_array() expects parameter 1 to be resource という警告が発生してしまいました。 何が原因なのでしょうか? C言語は学習経験ありますが、php,DBともに初めて数日目なもので見当違いな質問をしていたらすいません
200 :
198 :2010/02/23(火) 22:48:46 ID:???
>>199 うわ、めちゃくちゃ恥ずかしいミス・・・顔赤くなる
ありがとうございました
test
test
pear mailで添付ファイルを送信する時 Mail_Mime::addAttachment() で添付するけど 添付ファイルが複数ある場合、 addAttachment(file1, fil2, ,,,) て添付しますよね 添付ファイル名を配列で持ってる場合 どうやってaddAttachment()に渡してやればいいですか?
foreach
foreach( $attache_file_array as $file ){ $objMime->addAttachment( $file ); } ってことですかね? でもなんかこれだと添付できないんですよね
207 :
nobodyさん :2010/02/24(水) 11:07:11 ID:bkeQjCgv
SQLインジェクション対策やXSS対策で HTMLタグを使いたい場合はどうすればいいんでしょうか
そのままで平気だよ
209 :
nobodyさん :2010/02/24(水) 12:16:00 ID:QiKWkWLO
すみません。質問させてください。 Linux + Apache 2.0系 + PHP4 の環境ですが、 flock関数による排他制御は安全ですか?
安全だよ
211 :
nobodyさん :2010/02/24(水) 12:36:52 ID:QiKWkWLO
>>210 Apache 2.0 の worker の状況によって変わるということはありますか?
※ PHPのマニュアルにはマルチスレッド云々の記述があり心配です。
http://jp.php.net/manual/ja/function.flock.php >いくつかのオーペレーティングシステムでflock() はプロセスレベルで実装
>されています。ISAPIのようなマルチスレッド 型のサーバーAPIを使用
>している場合、同じサーバーインスタンスの並列スレッドで実行されている
>他のPHPスクリプトに対してファイルを保護する際に flock()を使用することはできません!
213 :
nobodyさん :2010/02/24(水) 13:20:12 ID:QiKWkWLO
>>212 そのページですが、自分も既に読んでいたのですが、
結局のところ、Linux + Apache 2.0 で flock が使えるのか、言及していませんでした。
詳しい方、ご教示ください。
すみません。
LinuxだからNFSかどうかだけ確認すればいい そちらの環境のことはわかりかねる
で、使えたら使うの?flock
216 :
nobodyさん :2010/02/24(水) 14:52:49 ID:TKFttfs6
いやん
ASPがWindows+IISで発展してきたのなら PHPはフリーの環境であるPC-Unix+Apacheで発展してきたもの 基本的にそれに一番最適化されてると思えばいい Windowsについての注意書きはよくみるように 特にApacheやLinuxなど明記されてない場合問題なく使えると思っておk
コンパイラのRoadsendてver5完全対応じゃない。 最新版に対応するactive perl active rubyみたいのないの。 スクリプトうめこみでもいいんで、windowsのexeが作りたい。 バイトコード生成が標準装備のようだが、phpが動かせなければ意味ない。
curl_multiを動かそうと、Roadsend入れたのに対応していない。 windowsバイナリが作れて、鯖でも同じコードが動くっていうのがよいのに。 開発効率的に。
チラシの裏に書きやがれでございます。
221 :
nobodyさん :2010/02/24(水) 15:33:36 ID:Cen8GI8a
今までは自分が使うものだけを作ってきたので、 自分の使うサーバ仕様にあわせて書けばよかったのですが、 色々なサーバでも使える他人に公開するような(実際にはしませんが)スクリプトを書いてみたいと思ってます。 サポートの終わったPHP4は除外して、PHP5以上を対象とした書き方にするとして、 ネイティブ関数で組むよりさらに高速(な場合があり)で便利なエクステンション(PECL)がいくつかあると思うのですが、 これらがサーバに入ってるかどうかでネイティブ関数での実装と分けるような書き方がいいのでしょうか? 例えばPDOがインストールされているサーバならPDOを使い、 されていないならネイティブ関数で組んだものを使うといった感じです。 もし分ける書き方いいとしたら、実装方法として、 try { PDOインスタンス 処理〜 } catch (Exception e) { try { ネイティブ関数接続 処理〜 } catch (Exception e) [ die(); } } とするか、あらかじめインストール時にサーバ構成(PDOの有無)を調べたものを記憶しておいて、 同じフィールド、メソッドが書かれて似た働きをする2種類以上のクラス(PDO用とMySQLやPgSQLのネイティブ関数を使ったもの) を用意してそれをサーバ構成によってincludeを変えるという手法にするかで迷っています。 どちらがいいのでしょうか?またもっとベターなやり方があったらアドバイスお願いします。
222 :
221 :2010/02/24(水) 15:37:43 ID:Cen8GI8a
すみません。 よくよく考えたらPDOが使えないところでPDOインスタンスしたら、 Exception行かないでそんなクラスねーよで終わっちゃいますね。 上のソースコードは忘れてください。
223 :
nobodyさん :2010/02/24(水) 15:40:26 ID:QiKWkWLO
>>214 NFSではないです。
>>217 flockの話ですか?
だとすれば使えるものと捉えてよろしそうですね。
PECLも標準関数もおなじネイティブ。 中身のアルゴリズムが違えば速度差は出る。 たとえば効率的なソート関数など。 PECLが良いとは限らない。作者の腕次第。
226 :
219 :2010/02/24(水) 15:56:05 ID:???
227 :
221 :2010/02/24(水) 16:04:06 ID:Cen8GI8a
>>224-225 ありがとうございます。
フレームワークのソースを読む自信がないですが、
頑張って読んで見たいと思います。
PEARはコピーすれば使える 標準phpコードが動くだけ。
PEAR = 外部依存のないpure phpのフレームワーク
フレームワークじゃねぇよあほw
フレームナイワーク
もまいらの仕事はクレイムワークだろ
233 :
221 :2010/02/24(水) 17:10:48 ID:???
cakephpで app/config/database.php.default で定義したデータソースを、 cake/libs/model/connection_manager.php で何かやってるのまで突き止めました。 でも正直見慣れない書き方が多くて何がなんだか・・・ フレームワーク使って作れば多くの環境に対応できそうだから、 自分で組むよりは使い方を覚えたほうがいいのかもしれないですね。 でも勉強も目的なのでもう少し頑張ってみます。 チラ裏気味ですみません。
wordpressのpdo for wordpressをPEARに書き換えるという大役を命ずる。
他人のソース見ると突拍子もなくいきなり変な関数出てくるじゃん? マニュアル見てもそんな関数はないし functionでテキスト内検索してもそんな関数定義はないし となるとどこかでincludeかrequireしてるのかとテキスト内検索してもしてないし 謎は深まるばかりである
フレームワークの方が、PEARヨリ ツカエンダロ まずpure phpとは限らない。動作環境が少ない。 PEAR入っていないとしても、実行コードと同ディレクトリに 予備で必要コード持ってれば動く。
なんで単なるライブラリ群のPEARとフレームワークを同系列で話進めてんの?
フレームワーク使ったこと無いんだろ
.NETフレームワークは使ったことある。
a.php function a() { echo "morning\n"; } b.php function b() { echo "evening\n"; } c.php function c() { a(); echo "hello\n"; b(); } index.php include("a.php"); include("b.php"); include("c.php"); c(); こうじゃね
>>241 突拍子もなく出てくる関数ってグループ規模の開発だろうし
そんなの読み進めたこともないからわからないけど
そんなわかりづらいこと普通するか?
俺ならcでaとbをincludeして
indexでcだけincludeするけどな
>>241 そんな感じならgrepですぐに見つかりそうだけどな
PHPエディタですらプロジェクト全体検索あるから
見つからないというのはもっと別の考えもしない理由がありそうだ
あれだろ 自作の組み込み関数つくっちゃいました系
それじゃ公開できないだろw というよりしても動かない罠
特定ディレクトリの全てのファイルを配列に入れて順次includeするっていう手法なら 明示的にファイル名を書かないから出ないんじゃないだろうか
拾ってきたソース全体を対象に検索すれば解決 よって検索の仕方が悪いでAF
anal fist
anal fuck
find . -type f -name "*.php" | xargs grep "関数名" Linuxならこんなんとか。
Phalangerもマルチスレッドのcurl関数つかえん どうなってるの 最後にjavaにこんぱいるするやつやってみるか
Quercus: PHP in Javaも2006年から更新されて無くて駄目だ。 hiphop使うのにlinux入れるくらいならアパッチで動かせればいい。
お前はさっきから何独り言いってんの? 特定のソフトウェアの話はスレ違い
ローカルでマルチスレッドとEXEできるやつ教えて
php使う選択肢がそもそも間違い javaスレでも池
257 :
nobodyさん :2010/02/24(水) 18:42:28 ID:bh88JagV
Zend Optimizerっていうの見つけたんですが、本当にある程度処理が高速化するのですか? 使い心地を知りたいです また、皆さん使われていますか?
ローカルの作業で使いつつ、鯖の動作数が多いphpを使いたい
>>257 開発規模が大きいなら、比較すれば体感できるくらい変わる
eAccelerator と併用すると更に変わる
せめてローカルだけはPHPから開放されたいやつの方が多そう
261 :
nobodyさん :2010/02/24(水) 19:07:26 ID:5FK8q+s6
連想配列でtest<>testってのを外部ファイルから読み込んで 出力させたいんですがどうやっても出来ません・・・。 何がいけないんですかね?
全部
263 :
nobodyさん :2010/02/24(水) 19:51:17 ID:QiKWkWLO
264 :
nobodyさん :2010/02/24(水) 20:14:17 ID:QiKWkWLO
具体的には以下のコードです。 安全でしょうか? ---------- $retry = 0; $fp = fopen(CSV_FILE,'a'); stream_set_write_buffer($fp, 0); while(!flock($fp, LOCK_EX)){ $retry++; if ($retry > 5) { return FALSE; } usleep(100000); // 0.1秒待つ } fwrite($fp, $line); @flock($fp, LOCK_UN); @fclose($fp);
266 :
nobodyさん :2010/02/24(水) 20:33:04 ID:QiKWkWLO
たびたびすいません。ちゃんと書きます。 入力: CSV_FILE → 対象となるCSVファイル $line → 追記したい行 戻り値: CSV追記成功時は TRUE、失敗時は FALSE。 // CSV追記処理 function csv_write($line){ $retry = 0; $fp = fopen(CSV_FILE,'a'); stream_set_write_buffer($fp, 0); while(!flock($fp, LOCK_EX)){ $retry++; if ($retry > 5) { @fclose($fp); return FALSE; } usleep(100000); // 0.1秒待つ } fwrite($fp, $line); @flock($fp, LOCK_UN); @fclose($fp); return TRUE; }
retryなんて必要ない 1回目で書き込みが成功しない場合retryしても書き込みが成功するとは思えない file_existsで書き込み対象があるか確認 is_writableで書き込み対象が書き込み可能か確認
オープンしてからロック待ちして*追記*だと、 まあ、いいこと無いわな。 flock使わない方法使った方がいいよ。占有権とってからファイルオープンね。
しらんがアパッチのセーフモードと、スタンドアロンで同じ方法で マルチスレッドやる方法教えてくれよ
ないからあきらめろ 元々phpはマルチスレッドに対応しとらん cURL使った擬似的なものを紹介してるとこもあるが そのモジュールすらはいってないなら手の施しようがない ご臨終です
複数からファイルアクセスが起こるなら、sqliteやmysqlでいいんでは。
そうですか。わかりました ありがとうございます
273 :
nobodyさん :2010/02/24(水) 22:15:50 ID:5FK8q+s6
$users = array('hoge' => 'geho', 'guest' => 'guest'); $u = $_POST['username']; $p = $_POST['password']; if ($u != '' && $p != '') { if ($p == $users[$u]) $_SESSION['username'] = $u; else unset($_SESSION['username']); } この連想配列を外部ファイルから出力させたいのですがさっぱりわかりませんorz
>>235 亀レスだけど、__call()とか使ってたら、検索に引っかからないかもね。
ID:5FK8q+s6 説明がへたくそすぎるwwwww ようするに中身が hoge<>geho guest<>guest って書いてある外部ファイルを読み込んで ↓↓↓↓↓ $users = array('hoge' => 'geho', 'guest' => 'guest'); というように連想配列に格納したいってことだろ? 本質とは違うその下の部分に突っ込みたくなるじゃないか・・・
277 :
nobodyさん :2010/02/24(水) 22:43:22 ID:5FK8q+s6
>>274 ふむふむ。
参考になります。
>>276 あ、その通りです。
スクリプトを拾って自分なりに書き換えて遊んでるのですがうまくいかなくて・・・。
$data = file("外部ファイル"); $users = array(); foreach ($data as $row) { $tmp = explode("<>", $row); $users[$tmp[0]] = $tmp[1]; } print_r($users); 動作は確認してないがこんな感じじゃないっすかね
rtrim
281 :
nobodyさん :2010/02/24(水) 23:12:02 ID:eGz4iYXY
規制喰らってるので携帯から失礼します $obj &= new ○○(); この&=はどういう意味があるんでしょうか?
認識・・・? なんか超初心者っぽいな エラーでてるならエラー書かないとエスパーは今不在だ
>>281 「PHP オブジェクトの参照渡し」でググってみればよいと思われ
284 :
nobodyさん :2010/02/24(水) 23:17:04 ID:eGz4iYXY
ありがとうございます!調べてみますね
285 :
nobodyさん :2010/02/24(水) 23:19:20 ID:5FK8q+s6
>>282 認識って違いましたねw
一行目のhoge<>gehoだけうまく読み込んでくれてないっぽいです。
エラーは出ていませんが・・・。
BOMちゃうんか
288 :
nobodyさん :2010/02/24(水) 23:23:17 ID:HQ6IjQWg
ローカルな話題ですみません。 【OS名】Windows XP 【PHPのバージョン】PHP5.2.10 CLI test.php <?php system("時間が掛かるプログラム.exe"); ?> test.phpを終了させた時、時間が掛かるプログラム.exeも終了して欲しいのですが 終了してくれません。何か終了させる方法はありますか?
289 :
nobodyさん :2010/02/24(水) 23:26:53 ID:5FK8q+s6
>>286 $users[$tmp[0]] = $tmp[1];
この辺?w
>>287 BOMってググってみたけど空白?
>>289 検討違い
$data = file("外部ファイル");
この後にprint_r($data);してみれ
291 :
nobodyさん :2010/02/24(水) 23:54:55 ID:dcz7C6Qu
LAMP環境という言葉を最近よく聞きますが、このスタイルで開発する場合、 apacheの公開用ディレクトリにphpファイルを置いてそれを直接編集しながら開発していくのが普通でしょうか? あるいは、Java開発みたいに別の場所で編集して実行時にデプロイ、みたいなことをやるのですか? 現場でLAMP開発をされてる方はどのような流れで開発してるのでしょうか?教えてください。
292 :
nobodyさん :2010/02/25(木) 00:04:07 ID:5FK8q+s6
>>290 おお、そういう事でしたか。
んー確認してみましたが特に問題なかったですorz
>>288 終了させたときってどのタイミング?
phpが全て表示されたタイミングか
ブラウザを閉じた(他へ移動した)タイミングか
まぁたぶん後者なんだろうけど
両者に共通する点としてsystem関数使えるならプロセスをkillすればいいと思う
XP Proならtaskkillってコマンドがあるが
Homeだとないのでどっかから似たようなプログラムを探して持ってこればいいと思う
軽く探したがこんなのとか
ttp://www.vector.co.jp/soft/winnt/util/se401845.htm 後者のタイミングの場合普通ではこの処理を挟むことも不可能なので
JavaScriptのonBeforeUnloadイベントで終了時(移動時)に
ajaxかなんかで終了させてやるしかないかと思われ
294 :
293 :2010/02/25(木) 00:06:50 ID:???
ごめん上のリンク404出るわ 拡張子のとこhtmじゃなくてhtmlにすれば見れる
>>291 どちらでもできるから都合いいほうでやったらいいよ
LAMPに限った話なの?って感じもするけど
296 :
293 :2010/02/25(木) 00:28:21 ID:???
ごめん・・・CLIって見落としてたわ 全部忘れてちょうだい ていうか普通にバッチ処理でいいんじゃ
297 :
nobodyさん :2010/02/25(木) 01:23:21 ID:oCMgk6uh
こんばんわ、メールがちゃんと送信できるように while(!mb_send_mail(/*メール*/)) ってやるのって有効ですか?
回数を決めてやれ 一生終わらない可能性
C言語で可能なことなんですが。 char c; int n = (int)c; というキャストは出来ますか。 文字型を-128 〜 127に変換するってことです。
サナクス
(C 言語で行われるように) 数値に変換することで 一つの文字のコードを取得できると期待してはいけません。 文字と文字コードを相互に変換するには ord() および chr() 関数を使用してください。
304 :
nobodyさん :2010/02/25(木) 02:59:45 ID:QIQePhl3
$data = file("ttttt.txt"); $users = array(); foreach ($data as $row) { $tmp = explode("<>", $row); $users[$tmp[0]] = $tmp[1]; } $tmp[0] = $_POST['username']; $tmp[1] = $_POST['password']; if ($tmp[0] != '' && $tmp[1] != '') { if ($tmp[1] == $users[$tmp[0]]) $_SESSION['username'] = $tmp[0]; else unset($_SESSION['username']); } hoge<>geho aaaa<>bbbb 1111<>2222 なぜか1111<>2222しかログインできない・・・。 何がいかないんでしょうか?
半角とEUC-jpが混在している文を、特定文字を置換すると 本来、区切れない部分を置換してしまうことがあります。 対処法はありますか。 ユニコード文字列みたいなのが出来ればいいですが。 一語が一つの配列入りしてれば
>>304 なんでforeachのブロックが終わったのに$tmp使ってるの?
その$tmpはforeach内のみで使うローカル変数でしょ
何やってるか理解できてないでしょ?
答え書いても分かるとは思えないけど
$data = file("ttttt.txt");
$users = array();
foreach ($data as $row) {
$tmp = explode("<>", $row);
$users[$tmp[0]] = $tmp[1];
}
この処理が終わった時点で
$usersは
$users['hoge'] = "geho";
$users['aaaa'] = "bbbb';
$users["1111"] = "2222";
こうなってるでしょ
セッション処理してるけど理解してないだろうしそこは省いて簡素化して続き書くと
if (isset($_POST['username']) && isset($_POST['password'])) {
if ($users[$_POST['username']] == $_POST['password']) {
echo "認証成功";
} else {
echo "認証失敗";
}
}
308 :
307 :2010/02/25(木) 04:41:19 ID:???
と説教たれといてなんだが色々間違えてたわ ちょっと手直しする
別に間違ってなかったか・・・他の人が指摘してる通りrtrim挟んでなかったんだね <form method="post" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>"> N<input type="text" name="username" value=""> P<input type="text" name="password" value=""> <input type="submit"> </form> <?php $data = file("ttttttxt"); $users = array(); foreach ($data as $row) { $tmp = explode("<>", rtrim($row)); $users[$tmp[0]] = $tmp[1]; } if (isset($_POST['username']) && isset($_POST['password'])) { if ($users[$_POST['username']] == $_POST['password']) { echo "認証成功"; } else { echo "認証失敗"; } } ?> array_key_existsとか使ったほうがいいかもしれないがとりあえず簡素化したものなのでこれで あと本番ではエスケープ忘れずに
310 :
309 :2010/02/25(木) 05:20:07 ID:???
たびたびスマン・・・やっぱ
>>309 はよくない
何も入れなくても認証されてしまう
isset使ってるのが原因でもあるがやっぱarray_key_exists使って
if (isset($_POST['username']) && isset($_POST['password'])) {
if (array_key_exists($_POST['username'], $users)) {
if ($users[$_POST['username']] == $_POST['password']) {
echo "認証成功";
} else {
echo "認証失敗";
}
} else {
echo "認証失敗";
}
}
まぁ書き方は色々あるのでとごまかしつつ寝ます・・・
これはヒドイ・・
312 :
288 :2010/02/25(木) 13:22:24 ID:???
>>296 答えてくれてありがとう。
普通ならバッチ処理でいいのですが、今回はGUIを作っていまして。。
いろいろ試した結果
proc_open()で時間が掛かるプログラムを起動
proc_open()のオプションでbypass_shellをtrueにする
終了時にproc_terminate()
こんな感じでできました。
textareaにデフォルト値入れたいんだけど、中に何が入るか分からない場合htmlspecialcharsすべき?
314 :
nobodyさん :2010/02/25(木) 14:13:44 ID:5niKfpQR
ID表示忘れました
316 :
nobodyさん :2010/02/25(木) 14:32:59 ID:4W7DKvAc
MYSQL5.0を入れて、DBと連携してWEBアプリケーションを構築中なのですが、 MYSQLと接続をしようとしたところ、 Call to undefined function mysql_connect と出て先に一向に進みません。 PHP5とMYSQLの相性の問題かと思ったのですが、 バージョン的にも問題がないようです。 他に原因として何が考えられますか?
317 :
nobodyさん :2010/02/25(木) 14:35:00 ID:4W7DKvAc
色々と構成をいじってしまったので、 とりあえず、サーバーを再起動して見てみます。
mysqlの拡張を読み込めてないだけやで
319 :
nobodyさん :2010/02/25(木) 14:42:16 ID:4W7DKvAc
再起動してみましたが、やっぱり症状変わらずです。 MYSQL単体だとログインが出来て、テーブルも作れます。 PHP5もphpinfo()で動作は確認しています。 やっぱり、接続中に何らかしらのトラブルが発生しているようです。 ネットワーク周りとかで、疑った方がいい設定値などありますか?
320 :
nobodyさん :2010/02/25(木) 14:44:51 ID:4W7DKvAc
>>318 mysqlが原因ですか・・・
DBサーバー関係が疎いので、色々やっているうちに、どこかの設定を間違っていじっていたかもしれません。
今から、再インストールしてみます。
ありがとうございます。
>>320 mysqlではなくphpのmysql用のモジュールが読み込めてないだけ
phpinfo()にMySQLの項目がでてこないと使えない
>>319 PHP5(2系3系)とMySQL5.xはdllの相性が悪い
5.2なら「php mysql 修正版 dll」でググレ
王道的な解決策は
>>6 のブログに書いてある
【OS名】linux 【PHPのバージョン】php5 環境は特に限定せず、普通のレンタル鯖等での動作を想定。 数値での++的な事をアルファベットでやりたいです。 a,b,c....と事前に配列で定義することなく、プログラム的にa,b,c....をループの中などで出力する方法はないでしょうか?
WindowsXPにPHPを入れてるのですが PHPからウィンドウズのアプリ(.exe)を起動するにはどんな関数を使えばいいのですか? アプリはPHPソースと同じ場所にあります。
327 :
nobodyさん :2010/02/25(木) 16:39:28 ID:gV6UoPDq
おっと、これは失礼。 WindowsXPにPHPを入れてるのですが PHPからウィンドウズのアプリ(.exe)を起動するにはどんな関数を使えばいいのですか? アプリはPHPソースと同じ場所にあります。
`hoge.exe`;
329 :
nobodyさん :2010/02/25(木) 16:51:08 ID:gV6UoPDq
>>328 いやそうやって書いてたんですがエラーでて(´・ω・`)
っておもってたんですがスペルマミスでしたwwwwwwwwwwwwwwwwwサーセンwwww
そして直して再度やってみたら、なんかブラウザが読み込み中のままで
サーバー側でアプリが起動してないんですが
他に何か気をつける点があったら教えてください
`GUIなアプリ.exe`; とかしてない?
サーバー側のログは?
332 :
nobodyさん :2010/02/25(木) 17:10:15 ID:gV6UoPDq
>>330 えっと普通のWinアプリなのでGUI的な感じですが・・・
>>331 ログどこにありますかログ。みてみます
GUIかよ `〜` は文字出力して戻ってくるのが前提のコマンドだ。 もしサーバー側で実行が成功してるなら そのphp、つまりhttpdの実行ユーザーで実行されている デスクトップがそのユーザーのものじゃないからそのままじゃ出ないだろう サービスの設定でデスクトップとの対話を許可するとかやれば出るかもしれない 実行してphpkら切り離すのは、、、&使えたっけ?forkしてexecとかか
334 :
nobodyさん :2010/02/25(木) 17:31:33 ID:gV6UoPDq
>>333 すごいありがとうございます。
確かに画面には出ていませんでした。。。
んでタスクマネージャみてみたらボタン押した回数分起動してましたww
すみません、サービスの設定はどうやってやるのですか?><
んで、サイトに書いてるようにexecやったらphpが抜けてこないっぽいので
切り離すやりかたを><
サービスは、、、マイコンピュータの右クリックから管理でサービス選んで Apacheのプロパティ出してログオンのとこにあるデスクトップ〜をチェック
336 :
nobodyさん :2010/02/25(木) 17:56:54 ID:gV6UoPDq
>>335 できました!!!
タスクトレイのアイコン右クリのサービスでもOKでした。
おかげでアプリは見事に表示されました!!
で、これやっぱりアプリ終了させるまでexecで止まってるみたいですね。
アプリは起動されたら一連の動作を終えたら終了するようにするので
これはこれでOKかなとおもいました。
いろいろありがとうございました。
ほんと助かりました。。。
>>313 htmlspecialcharsは表示のタイミングで使うものなので
受け取った値をどう使うかによる
表示するのなら(そのタイミングで)使うべき
内部で処理するために使うだけならいらない
何言ってんだこの馬鹿は
スーパーチンピラタイム
340 :
nobodyさん :2010/02/26(金) 02:35:11 ID:L4Bq0Atm
>>305 rtrimを使わないといけないのは分かりましたが理解が出来ない・・・。
>>307 なんとなくでしか分かってないですorz
issetで書いた方がいいのでしょうか・・・?
>>310 一つ一つ理解して頑張っていきたいと思います・・・。
これで動きました。
ありがとうございます。
まぁはじめからうまくいくようなもんじゃないしガンガレ
>>340 http://jp.php.net/manual/ja/function.file.php 注意: FILE_IGNORE_NEW_LINES を指定しない限り、 配列に取り込まれた各行は行末文字も含みます。
行末文字を取り除きたい場合には rtrim() を使用する必要があります。
fileで配列に入った1行ずつの最後には改行が入ってるよってこと。
だからexplodeした最後の配列の中は
"geho[行末文字]"になっていて比較する"geho"とは違う文字列となってしまう。
こういうときは自分なら
hoge<>geho<>
aaaa<>bbbb<>
1111<>2222<>
と余分に<>を付けとく
343 :
nobodyさん :2010/02/26(金) 11:11:53 ID:AdOXrMqO
すんません。 昨日execがどーのとかって騒いでた基地外ですがまた質問させてください。 昨日の件はうまくいって感謝しています。んで、それの続きなんですが echo "処理中"; exec('hoge.exe') echo "<img src='hoge.jpg'>"; てな具合でボタンを押したらhoge.exeを起動してhoge.exeがhoge.jpgを作成して 作成したらhoge.exeは終了するのでhoge.jpgを表示するってストーリーなのですが hoge.exeはjpgを作成するまでやや時間がかかるので、 ボタンを押したら"処理中"の文字を表示してからhoge.exeを起動したいのですが 何故か、hoge.exeが終了してから"処理中"が表示されてしまいます・・・ これどうしたら、先に処理中って文字を表示させることができますか?
flush
345 :
nobodyさん :2010/02/26(金) 11:31:14 ID:AdOXrMqO
>>344 でけましたありがとう。
ob_flush( );
flush( );
と両方しないとダメなんですね。
346 :
nobodyさん :2010/02/26(金) 12:23:06 ID:OgECULN1
【OS/PHPのバージョン】 WindowsXP / PHP 5.2.11 動画アップローダを作成しています。 動画・タイトルどちらが欠けてもエラーが出る様にしています。 しかしタイトルを未入力で、動画だけをアップした時、 何故かエラーが出ずphpがそのまま実行されて確認画面まで来てしまいます。 (動画も結局アップされていません) これはphp.iniで設定された容量制限である100MBをオーバーしてしている場合のみで、 軽い動画ならうまく動作する様ですが…。 ■up.html <form action="up.php" method="POST" enctype="multipart/form-data"> 動画 <input name="video" type="file"><br> タイトル <input name="videotitle" type="text" size="30" value=""><br> <input type="submit" name="up" value="アップする"></form> ■up.php <?php if (isset($_POST["up"])) { $path = "./" $video = $_FILES["video"]["name"]; $videotitle = $_POST["videotitle"]; if (!isset($videotitle)) { error;//エラー処理(元のアップローダ画面に飛ばす) exit();} if (move_uploaded_file($_FILES['video']['tmp_name'],$path.$video) == false) { error;//エラー処理(元のアップローダ画面に飛ばす) exit();} //確認画面処理〜 }?> php.iniのファイルサイズ制限が効いていないのかと思い 直接ファイルサイズ if ($_FILES["video"]["size"] > 1000000) {〜} 等でチェックしましたが、 やはり大きい動画をアップするとこのエラーはスルーされてそのまま確認画面まで来てしまいます。 どこが間違っているのでしょうか?
$videotitle = $_POST["videotitle"]; if ($videotitle == "") {
348 :
nobodyさん :2010/02/26(金) 12:35:36 ID:L4Bq0Atm
>>342 ふむふむ。
file関数をバカにしてました・・・。
勉強になります。
349 :
346 :2010/02/26(金) 13:40:42 ID:OgECULN1
>>347 やってみましたが、やはり動画のアップがされた後確認画面が出ます。
仮に値を入れても、動画ファイルの容量が大きいと空の状態の確認画面が出て来てしまいます。
>>349 他にpostサイズの制限とかメモリ制限の設定があるから確認してみたら
$_FILES["video"]["error"]もご確認くださいませ
ポスト容量でかすぎの失敗のときに isset($_POST["up"])も falseでしょう。 そうすると、いきなり確認画面になるね。
352 :
346 :2010/02/26(金) 14:04:45 ID:OgECULN1
>>350 $_FILES["video"]["error"]確認しましたが空でした。
>>351 ネットで検索した所
「php.iniで設定したpost_max_sizeの値を超えると、該当の変数の値が消えてしまう」
というのがあったので、
「post_max_sizeを超える=動画をアップしていない状態」になるという事は何となく分かりました。
となると動画の容量がデカイ状態と動画ファイルを指定していない状態を同一の処理にするしか
無いという事でしょうか。
ごめん
>>352 小さいサイズの画像とかはアップできるん?
355 :
346 :2010/02/26(金) 14:15:28 ID:???
>>354 post_max_sizeあるいはupload_max_sizeを超えなければいける様です。
色々探してて次の様な記述見つけたのでとりあえずの対応策打っておきます。
>・php.ini で post_max_size > upload_max_size にしておかないと、
>スクリプト自体が強制終了して、$_FILES[...]['error'] を見てエラーメッセージを出せないので注意。
>・アップロード form において、hidden input の MAX_FILE_SIZE は
>type="file" な input より手前に書かないと適用されないので注意。
ありがとうございました。お騒がせしました。
356 :
nobodyさん :2010/02/26(金) 17:13:48 ID:pmFXcZ0U
MimeTypeのところで出てきたのですが、magicfileって何なのでしょうか? 単にmagicfileで検索しても名探偵コナンばっか出てくるし(苦笑)、それを検索から除去しても良く分かりませんでした
それはPHPの質問じゃなくApacheの質問くさいが(苦笑)
>>357 そうなんですか?
分かりました
ではApacheスレに移動します
359 :
nobodyさん :2010/02/27(土) 14:37:21 ID:96it23LZ
「PHPは厳密にはオブジェクト指向言語じゃない」 といわれるゆえんは何? クラスも持ってるしクラスオブジェクトもつくれるしオブジェクト指向言語と呼ばれる資格は 十二分に兼ね備えていると思うんだが(´・ω・`)
後つけのオブジェクト指向だからでしょ 普通CといったらC++はささないけど PHPといったらPHP3もPHP5もさすし名称的な問題もあるのかなぁと 今の状態はまだまだなんちゃってオブジェクト指向 オブジェクト指向としての機能が弱かったり足りなかったり
Javaやれば分かるよ でも相対的な程度の違いであって オブジェクト指向かそうでないかと言われれば「YES」になる
具体的にどこが弱いとか説明できない回答者の発言はスルーでおk
お前のレスが一番役に立たねぇよw
それを言うなら ) { を忘れないようにやろ
なぜにチンピラ・・・?
368 :
nobodyさん :2010/02/27(土) 17:56:19 ID:AeZrDmue
【OS名】vine linux 【PHPのバージョン】php5.26 【連携ソフトウェア】apach2.2 【質問内容】 これまで相対パスしか使ったこと無くてドキュメントルートから上にファイル置いたとき、 どんな風に指定すればいいのかわからないよっ 誰かおしえて
だからphp5.26なんてバージョンはねえしapach2.2なんてソフトはねえんだよ
/../../dokkano_dir/nankano_file
>>362 修飾子の使い方が限定的である
オーバーロードができない
多くの関数エラーが例外処理でない
ググれば3秒で出てくるのにね
修飾子の使い方が限定的って? あと例外投げないのが嫌ならエラーハンドリングすればいいのでは?
クラス内のメソッドからクラスプロパティにアクセスするときって $this-> という修飾子をつけなければ 正しくアクセスできないわけだけど、 $this-> をつけなくてもエラーが返されないって点はこわくね? うっかり $this-> を付け忘れるとそのメソッド内限定の変数として扱われ、クラスプロパティの値は 全く変えられなくなる。それでいてエラーとかは表示されないわけだからバグ混入の原因にもなる。 以前クラスを作った際にクラスプロパティの値が何やっても変更されなくて数時間の格闘の末 プロパティに$this->を付け忘れただけということが判明した。本当に恐ろしい体験だったぜ・・・
煽る前にぐぐれって感じだな
チンピラだから仕方がない
>>374 >あと例外投げないのが嫌ならエラーハンドリングすればいいのでは?
本人でないがそれじゃ意味ない罠
わざわざそういうことをしないために元々サポートされるものなんだから
すぐチンピラにしたがるのは
>>376 がOCNだから
>>376 しなくてもいいししてもいい
例外投げてくれたほうがいいと思うならすればいいじゃない
言語に使われるんじゃなくて言語を使わなくちゃだめだよ
オブジェクト指向が弱いってどういうこと?っていう話をしてるのに何を言ってるのかね君は
ファイルに読み書きするに際してコンストラクタでファイルをオープンし、 デストラクタでファイルをクローズするのはお行儀のいいプログラムだと思う? デストラクタを使えば確実にファイルをクローズすることができるし
そういう設計のクラスならいいんじゃね
ファイルのオープンはいくつまで出来ますか
自己解決しました
>>381 サンクス、この調子でいってみるノシ
ところで"rb+"オプション(読み書きモード)付きでファイルをオープンしたあとflock()で排他ロック。
ファイルを読み込んで処理を施したあと再度上書き保存して排他ロックを解除、
というシナリオを考えているんだけど最後にファイルを上書き保存する際に
一度ファイルをまっさらにする方法って無い?
"rb+"モードだとポインタを先頭に戻して書き込んでも以前のファイルの内容が残ってしまうんだよね。
たとえば"rb+"モードで長文開いたあと短文を保存すると短文のあとに以前の長文の残骸が残って
しまう。
書き込み前に一瞬だけ排他ロックを外して"w"オプションでファイルに書き込めばこの問題は
解決できるんだけど一瞬排他ロックを外した瞬間にそのファイルがいじられてしまう可能性だって
ゼロではない。
う〜ん・・・、どうすればいいんだろう・・・
ftruncate
【OS名】レンタルサーバ(CentOS 4.6と記述されてました) 【PHPのバージョン】5.2.5 - SafeMode 【質問内容】 phpで送信されてきたidとpasswordをListファイルにあるidとpasswordで照合させたいのですが 外からListファイルを読めないようにするにはどうしたら良いのでしょうか。
389 :
388 :2010/02/27(土) 23:21:14 ID:???
と思ったけどそれだけなら普通にドキュメントルートの上におけばいいか
390 :
nobodyさん :2010/02/27(土) 23:42:50 ID:wtKSisfT
>>389 atpagesを使用してるのですが、ドキュメントルートより上におくって無理っぽい><
リストをcgiファイルにすればいいんちゃうの atpagesならDB使えるしそっちでも
>>391-392 サンクストンクス兄弟
.htaccessが簡単そうだったので試したらできました。
【OS名】XP
【PHPのバージョン】5.2.5
【質問内容】
借りているサバでcronが使えないのでローカルの
タスクスケジューラーを利用してhttp経由で定期的に処理させたい
タスクがあります。
<?php
$URL="
http://xxx.com/index.php "
file_get_contents($URL);
?>
上のようなコードでレンタサーバ上のPHPファイルは
実行されるでしょうか?
もし駄目ならフォームを作っておいて
フォームの変数に実行の権限を与えて
JSでdocument.form.fname.onsbmit();
してやればいいのかなと考えているのですが
判然としません。
ブラウザでアクセスしたのと同じ動作するで
アクセスあったら起動すればいい。時間は5分間間隔とか
397 :
nobodyさん :2010/02/28(日) 13:22:02 ID:LiqVmvoY
配列の各値にファイル名が入っているのですが、 その配列を値のファイルの更新時間が新しい順にソートしたいのですが全く考えが浮かびません。 何か方法がありましたらお答え頂けると嬉しいです。
sort関数というものがあってだな
{ファイル名、更新日時}か、{番号、更新日時}をソート。
400 :
nobodyさん :2010/02/28(日) 13:28:01 ID:LiqVmvoY
配列の各値にファイルの更新時間を付加するしかありませんか・・・。 ありがとうございました。やってみます。
それ以外でどういう風にできると思ってたんだw
比較関数を呼び出すときだけでもいい。 しかし、同じのを複数回呼び出すので効率悪い。 確定した値つかうのを推奨。
今までずっとphpには実行権限与えなきゃいけないのかと思ってたけど、いらねーんじゃねーか!入門サイトのうそつき!
どこのサイトだよ 晒せや
405 :
nobodyさん :2010/02/28(日) 14:16:58 ID:LiqVmvoY
mod_phpににはいらない。cgiにはいる
$ip = getenv('REMOTE_ADDR'); でビジターのIPアドレスを取得できると思いますが たとえばノートンとか入れていてIPアドレスが表示 されないようにした人がアクセスしてきた場合は $ipにはどんな値が代入されますか?
ノートン恐るべしやな
409 :
nobodyさん :2010/02/28(日) 15:17:23 ID:VtmQa4ku
PHPでつかえて、バイナリデータとテキストの変換が可能で高効率のものはなんですか。 base64とかナスリエンコードとか。
410 :
nobodyさん :2010/02/28(日) 15:18:32 ID:VtmQa4ku
訂正。 ナスリ=URL バイナリの長文をソースコードに埋め込みたいのですが
そりゃあ16進ダンプとかだろ
412 :
nobodyさん :2010/02/28(日) 15:34:02 ID:VtmQa4ku
16進では16文字しか使わないですが。 base64にしときます。asciiで使える文字はもっとありそうですが実績と手間削減から。
お前女だな
書き込まなくても自己解決してたな
受託で引継ぎ請け負ったアプリがPHP5で動いてるのにバリバリPHP4の書き方になってる。 たぶんオプジェクトのオの字も知らない人が書いたと思われる。 こういうのを改修する場合って既存の書き方に習った方がいいのだろうか? あるいはリスク覚悟で書き直した方がいいのかな? お客さんは任せるって言ってるんだけど。
どちらがいいか分からない段階で無理しないほうがいい
なるほど…確かにそうですね。必要に迫られてるわけじゃないからとりあえず前例に習うことにします。 しかし酷いソースに合わせて機能拡張するって本当に苦痛だ
418 :
409 :2010/02/28(日) 16:45:39 ID:VtmQa4ku
バイナリ、アスキー化プログラムです。 実行ファイルでサイズが半分くらいになりなかなか効率良いですよ。 <?php function bin2ascii( $bin ) { return base64_encode( gzcompress( $bin, 9) ); } function ascii2bin( $asc ) { return gzuncompress (base64_decode( $asc) ); } function bin2ascii_file( $infile, $outfile ){ $fp = fopen( $infile, 'rb'); $data=fread( $fp, 10*1024*1024); fclose($fp); $data=bin2ascii($data); $fp = fopen( $outfile, 'wb'); fwrite( $fp, $data); fclose($fp); } function ascii2bin_file( $infile, $outfile ){ $fp = fopen( $infile, 'rb'); $data=fread( $fp, 10*1024*1024); fclose($fp); $data=ascii2bin($data); $fp = fopen( $outfile, 'wb'); fwrite( $fp, $data); fclose($fp); } bin2ascii_file("exploler.exe", "000"); ascii2bin_file( "000", "exploler.ex_"); ?>
ウイルス乙
10MB決め打ちですか
421 :
nobodyさん :2010/02/28(日) 16:55:14 ID:VtmQa4ku
"と'を除くと93文字のアスキー使えて、4バイトは93の5乗で表せます。 BASE64はデータ量は4/3になります。 BASE93だとデータ量は5/4になります。 元が120Kだと、160Kと150Kの差になります。93文字でもあまり減らせません。
普通に圧縮した文字列をテキストに書き込めばいいんじゃね
phpでやることじゃなくね
424 :
nobodyさん :2010/02/28(日) 17:13:20 ID:U94IcC74
コマンドラインで使えるデバッガを教えてください
ノ´⌒ヽ,, γ⌒´ ヽ, // ""⌒⌒\ ) PHPか・・ 懐かしいな i / ⌒ ⌒ ヽ ) !゙ (・ )` ´( ・) i/ | (__人_) |⌒ヽ/⌒\ (''ヽ `ー' / 〉 〉 ,、 ) / / (__ノ └‐ー<. 〈_/\_________ノ
>>426 xdebugってコマンドライン対応してたの知りませんでした
ありがとうございます
428 :
nobodyさん :2010/02/28(日) 19:11:37 ID:VtmQa4ku
wordpressなどCMSをアップロードするのに、こまかく圧縮して転送と展開すれば 速くなると思うが、PHPでそういうツールあったりしますか。
429 :
nobodyさん :2010/02/28(日) 19:14:31 ID:VtmQa4ku
アップロードに限らず、ダウンロード (= 鯖データから自PCへのアップロード)もですが。 無料の所だとサイズ300K以下とか制限もあり、細かく分ける必要あります。
430 :
nobodyさん :2010/02/28(日) 23:37:24 ID:6S1D3k9m
flock()関数で排他的ロックをかけてあるファイル$fpに他のプロセスが fopen($fp, "r+"); flock($fp, LOCK_EX); というアクセスをしてきたとき、どのように振る舞いますか? fopenの段階で一時停止して先にかけられた排他的ロックが解除されるまで 待ってから再開するんでしょうか?もし待つとしたら何秒くらい待ってくれますか?
lock話はやめよう。データベースに任せっきりでよい、。
Sqliteつかうなら、スクリプトを動作させる側にとって手順は増えない。 mysqlは導入がいるが。 sqliteが動かない所は入れるべき
SQLiteなくてもPosqlでいける。ロックも兼ねて。 俺はCakeで使ってるけど
phpにはaspのapplication("hoge").lockって無いの?
未経験で入社したらいきなりプロジェクトに放り込まれた 4社ぐらいで共同作業?してるらしい所に何故か自分が1人で行くことになった 毎朝ミーティングがあるのだが何言ってるのかさっぱり分からん 見とけとだけ言われて渡された資料が膨大で何がなにやら。
実力に見合わないところなら早くやめたほうがいい デスマの根源になって空気が重くなる そのうち鬱病になるよ
438 :
nobodyさん :2010/03/01(月) 10:36:19 ID:GAV4pXCg
439 :
nobodyさん :2010/03/01(月) 15:33:32 ID:H5wSRALn
2次元の連想配列で array( array( 'col1' => 1, 'col2' => 1, 'col4' => 1 ), array( 'col1' => 1, 'col2' => 1, 'col4' => 2 ), array( 'col1' => 1, 'col2' => 2, 'col4' => 1 ), array( 'col1' => 1, 'col2' => 2, 'col4' => 2 ) ) みたいになっているやつを、縦方向に串刺しして出力したいのですが ループで回していくしかないでしょうか? イメージで言うと $test[]['col1'] みたいな感じで、縦方向で配列として出力したのですが。
440 :
nobodyさん :2010/03/01(月) 15:53:39 ID:z47ZxXxQ
> lock話はやめよう。データベースに任せっきりでよい、。 データベースでファイルロック?! あの・・・、どうゆうことでしょうか?
ファイルシステムはB木とか使ってるし普通にデータベースだよなw
普通にデータベースですね
simplexml_load_file(); 使うとfatal errorってなってphp固まっちゃうけど、なんで?
スレタイを読まないから
PHPや! PHPつこてないから2chは落ちたんや!
そうかそうか
2ちゃんのせいでうちのサーバーにも影響出たわ
人少ない板だから見えないスレがまだ多いのぅ どんどん書き込んでや
もうPHPスレだけでいいよ
スレがないw
452 :
nobodyさん :2010/03/03(水) 01:49:31 ID:OC7p3okf
スレ復活age
ちょっと私事になるがサイトを作る上でphpファイルを沢山読み込んでたのだが、 何をどうやっても変な改行が含まれてデザインがガタガタになってた。 締め切りは迫るし分からなくてもう血の気が引いてた。 そこでなんとなくバイナリを使ったら 単にテキストにbomが入ってたせいでした。 これは初歩的な事だったのだろうか。こんなの聞いた事無いよ・・
質問なのですが ソースコード専用のアップローダーを考えていて ハイライトさせたいのですが、アクセス毎にハイライトさせると負荷やばいですか?
>>454 んなもんアクセス数によるだろう
あとスレタイ嫁
456 :
454 :2010/03/03(水) 02:13:00 ID:???
>>455 すみません;; ありがとうこざいました。
457 :
nobodyさん :2010/03/03(水) 09:47:11 ID:qB0rz8y7
ループに連番をふる方法を教えてください 今こんな感じになってます foreach($open as $read) { $element = split(",", $read); echo "ここに連番"; echo $element[0] ." " .$element[1] ."<br>"; }
foreach ($open as $i => $read) { $element = explode(',', $read); echo $i .'<br />'; echo $element[0] .' '. $element[1] .'<br />'; }
連想配列だったらどうすんだよwww
$renban = 0 foreach($open as $read) { $element = split(",", $read); echo $renban; echo $element[0] ." " .$element[1] ."<br>"; $renban++; } だせぇw
連番は0からでなく1からはじまるんdすが
463 :
nobodyさん :2010/03/03(水) 11:18:19 ID:qB0rz8y7
464 :
nobodyさん :2010/03/03(水) 14:12:42 ID:0y5py4rs
CSVファイルにフォームからの内容を保存しています。 submitボタンを押した後、サーバの読み込み中にF5を押したり、 別のページを見ようとするとファイルの内容が壊れてしまう事があります。 fwriteの前にflockを指定してもそうなるのですが、 読み込み中で他の処理をした場合、こうなるのは仕方ないのでしょうか?
書き込まなければ壊れないです
正しく書かないと ねっ
467 :
nobodyさん :2010/03/03(水) 14:42:55 ID:tlrE5Eoo
【OS名】vista
【PHPのバージョン】php5.3.1
【質問内容】
expression web3を使用してサイトを作っております。
画像をランダムに数枚表示し、その表示された画像にリンクとaltが付くようにするにはどうしたら良いでしょうか。
下のサイトのようにしたいのですが、全然分かりません。。
ttp://www.zakkaz.com/archives/002702.php どう書けばこんなふうになるのですか。
調べてみて以下のサイトのやり方が良いのか?と思い試しましたがエラー表示。
何が何だかパニックです。どなたかお願いします(土下座)
468 :
467 :2010/03/03(水) 14:44:13 ID:tlrE5Eoo
まずはJavaScriptでやりたいのかPHPでやりたいのかを決めてください(平謝り)
470 :
素人 :2010/03/03(水) 15:03:42 ID:???
これから本格的にPHPの勉強を始めようと思ってます。 何か初心者向けの本なるものを購入しようかと考えているんですが、みなさんが初心者だった頃 どの本を読まれてましたでしょうか?オススメがあれば教えて頂きたい。 初心者用でなくてもオススメの本があれば教えてほしいです。
php.net お薦め
調べながら作ってればそのうち身につく
473 :
nobodyさん :2010/03/03(水) 15:18:23 ID:uqAdaiUc
すんませんすごい初歩的な質問ですが echo "<html>"; echo "hoge"; echo "</html>"; と、既に書いてる状態で また最初から書き直したい場合はどうしたらいいですか? echo "<html>"; echo "hogehogehoge"; echo "</html>";
エスパー乙
>>473 echoを1カ所にまとめたらいい
<?php
$echo = "";
$echo = "<html>";
$echo .= "hoge";
$echo .= "</html>";
$echo = "";
$echo .= "<html>";
$echo .= "hogehogehoge";
$echo .= "</html>";
echo $echo;
?>
479 :
nobodyさん :2010/03/03(水) 15:47:35 ID:uqAdaiUc
あ、いろいろレスとかありがとうです。 ひょっとして、 $echo =""; で、既にブラウザに表示されてるhtmlはクリアされて $echo ="";からまた書き直せば以前のブラウザにかかれてたhtmlはあれして 最初からっぽいですかねこれ ためしてみますありがちゅー
>>479 既に送信されたデータを消すなんて出来るわけがない
>>478 は変数に保存しておいて最後に一度に出力するようになってるだけ
481 :
nobodyさん :2010/03/03(水) 15:57:22 ID:uqAdaiUc
ああ、そうなんですかそうだったんですか とりあえずさっきのとは意味合いが違うですが今んとこ、 echo "<meta http-equiv='Refresh' content='0;url=hoge.php'>"; これでまた最初からやり直してるあれです ブラウザに書いたあれをリフレッシュしつつ コードは途中からとかってそんな馬鹿な話はないってことでFAですかね?
>>481 それだとhoge.phpが実行されて、すぐにリロードが発生してまたhoge.phpが実行される。
途中からとかは無理
hoge.phpとhoge2.phpを用意すればいいんじゃね?
もしかしてAJAXのことを言っているのか
>>481 そういうのはJavaScriptでやろうか
486 :
nobodyさん :2010/03/03(水) 16:06:41 ID:uqAdaiUc
ファックアナルってことですねわかりました。 とりあえずどしろうとなので何ができて何ができないのかがわからなかったのでしつしねもんしてみました 他の方法とかも考えて勉強したいとおもいます。
487 :
nobodyさん :2010/03/03(水) 18:02:39 ID:GWDWl4Kw
【OS名】FreeBSD(レンタルサーバー) 【PHPのバージョン】Apache/1.3.41 (Unix) PHP/5.2.11 mod_layout/3.4 【連携ソフトウェア】mysql 【質問内容】 MYSQLのバックアップとミラーへの反映を、異なるレンタルサーバ間でやろうと思っています。 dumpを作成し、ミラー側のphpへhttpアクセスし、ミラー側のphpからdumpを取得するのはセキュリティ的によろしくないっぽいので、 dumpをミラー側へMULTIPART/FORM-DATAでPOSTするのが安全かなと思うのですが、これってソケットからコーディングしなければいけなかった気がします。 もっとスマートな方法があれば、教えてもらえないでしょうか
488 :
464 :2010/03/03(水) 18:05:45 ID:0y5py4rs
>>474 こういう関数があったんですね。参考になります。
とりあえず、464の内容ならファイルが壊れる可能性があるという事で理解します。
dumpよりも暗号化ZIPとかでコンパクトにした方がいいような気がするけどな マルチパートで送るにしても結局平文だし
490 :
nobodyさん :2010/03/03(水) 20:27:25 ID:p43dWZoR
データベースサーバーにデータを登録してそれをPHPで随時読み込むという方式をとろうと思っています。 データをデータベースにアップロードするさい、たとえば 猫 100円 犬 50円 鳩 20億円 ・・・・ みたいなCSVファイルを手元に用意してそれを一気にデータベースにアップロードすることはできますか? それともアップロードもPHPで一つ一つ行う必要がありますか? 加えてアップロード後にやっぱり 犬 200円 に変更したくなったとき、手元のCSVファイルを編集してそれをもとにデータベースの方にも反映させる ことは不可能でしょうか?
データベース使ってる意味ないじゃねぇかw クエリ発行しろクエリ
データベースを勉強してらっしゃい
>>490 「手元」ってのは、DB動かしてるのとは別のマシンってことかいな?
なんにせよ、CSVを読んでその内容をDBに登録するPHPスクリプトを書くのは当然可能。
変更させるのも可能。
494 :
nobodyさん :2010/03/03(水) 22:42:50 ID:p43dWZoR
>>493 はいそうです。手元のマシンからレンタルサーバー上のデータベースにデータをアップデートしたり
随時変更したりできないものかなと思いまして。
> なんにせよ、CSVを読んでその内容をDBに登録するPHPスクリプトを書くのは当然可能。
> 変更させるのも可能。
つまり手元のマシンからレンタルサーバー上のデータベースに手を加えるには
PHPを通さないと無理ということですねorz・・・
ありがとうございました(´Д`)
zend studioの値段すごいな
フリーのNetBeanseで全く同じ事が出来るのにね
498 :
nobodyさん :2010/03/03(水) 23:17:53 ID:p43dWZoR
500 :
nobodyさん :2010/03/04(木) 00:19:57 ID:Xd0cEYC5
アクセスログをとるスクリプトをPHPで書いています。 問題はログファイルでしてPHPスクリプトから読み書きできるような属性にしているため(646:rw-r--rw-) ログファイルのURLさえ分かってしまえば一般ユーザーからもログファイルの中身が盗み見されてしまいます。 ログにはアクセスしてきた人の個人情報(ホスト名や検索語)が載っているためできれば あまり第三者に公開したくありません。だからといって属性を640:rw-r-----とかにすると PHPスクリプトからもそのログファイルにアクセスできなくなります。 こういうときはどうしたらいいでしょうか?
だからデータベース
公開ディレクトリに置かなきゃいいだろ もしくは直接ファイルをapacheでアクセスできないようにする
このスレになってから3回目だなこの質問
フリーでころがってるスクリプトを参考にしようとも思わないのかね。
・ルートの上に置く メリット:簡単 デメリット:パスが変わるので変更が面倒 サーバによってはルートより上に置けない ・先頭に.htをつけたファイル名にする メリット:簡単 デメリット:Apache限定かつサーバの設定次第で出来ない ・htaccessで制限する メリット:配布する形ならもっとも一般的 デメリット:Apache限定かつサーバの設定次第で出来ない htaccessの知識が必要 ・データベースに突っ込む メリット:管理がし易い データ膨大になるほど処理速度が有利 デメリット:若干面倒 セキュリティリスクが増える DBが使えないサーバでは出来ない SQLの知識が必要
506 :
nobodyさん :2010/03/04(木) 01:17:07 ID:/m9H2563
拡張子をphpにする
あかんがな
中身全部出力されるがな
cgiにする
510 :
nobodyさん :2010/03/04(木) 02:15:10 ID:Xd0cEYC5
そうですか、データベースか.htaccessでフォルダ自体にアクセスできないようにするかしたほうがいいということですね。
>>504 フリーで転がっているものでログファイルをデータベースにしてあったり.htaccessでアクセス制限
してくださいね、と主張しているものはあまり見たことがないもので・・・
いいえ
特定の拡張子だけアクセスできないようにすればいいんです
ていうか
>>503 の発言から察してこのスレのログぐらい嫁
>>28
見せたくないファイルは公開ディレクトリに置かないってのが 基本中の基本なんだけどそれはスルーするの?
基本であるけど配布されてるものは全部ルート下のディレクトリに収める感じに構成されてるし このファイルはルートの上におけなんてわざわざreadmeに書かないんじゃないかね まぁ自サイトで使うのみなら定石だよな
514 :
506 :2010/03/04(木) 02:35:41 ID:/m9H2563
515 :
nobodyさん :2010/03/04(木) 02:46:35 ID:Xd0cEYC5
>>511 これは失敬、特定の拡張子にだけアクセスできないよう設定するという意味でしたか
>>512 レンタルサーバーなんで公開ディレクトリ以外のディレクトリにファイルを置くことはできないんです
ほうほうそれで?
どこのサーバよ
そんなとこあるか?
519 :
511 :2010/03/04(木) 02:54:09 ID:???
>>515 こちらこそ失敬
よく流れ読んでなかった
BASIC認証のことかと思ったすんませぇん
えっ
ん?
あ?
523 :
511 :2010/03/04(木) 03:00:44 ID:???
いやぁ・・・ >そうですか、データベースか.htaccessでフォルダ自体にアクセスできないようにするかしたほうがいいということですね。 これだけ見てBASIC認証の話してると思ったけど よくよく考えてみたら 特定ディレクトリにログファイル集めてDrectoryMatchのことを言ったのかなぁと思って
logfile public_html └index.php public_html └index.php └.htaccess └logfile
>>498 レンサバが、DBへの外部からのアクセスを許しているなら、手元のPC上のDBクライアントから
レンサバに繋いでDBの操作も可能。
上が駄目でも、レンサバにtelnetなりSSHなりでアクセスでき、レンサバ側にDBクライアントも
乗っているなら、それを使うという手もある。
上記がどっちも駄目なら、DBアクセスする(PHPに限らず何らかの)コードをサーバ上に置いて、
そのコードを(CGIなり何なりで)起動させる。
これら以外は俺も知らない。
hogeってなんですか?
<?php
mb_language("japanese");
mb_internal_encoding("UTF-8");
$to = "
[email protected] ";
$name = $_POST["name"];
$from = $_POST["mailaddress"];
$subject = $_POST["subject"];
$message = $_POST["message"];
$header = "From: " . mb_encode_mimeheader (mb_convert_encoding($name,"UTF-8","AUTO")) . "<" . $from . ">";
//入力チェック
if ($name == "") {$errMsg .= "名前が入力されていません。";}
if (mb_strlen($name) > 20) {$errMsg .= "名前は20文字以内で入力して下さい。";}
if ($from == "") {$errMsg .= "メールアドレスが入力されていません。";}
$ret = preg_match("/^[a-zA-Z0-9_\.\-]+?@[A-Za-z0-9_\.\-]+$/", $from);
if (!$ret) {$errMsg[] = "メールを正しい形式で入力して下さい。";}
if ($subject == "") {$errMsg .= "件名が入力されていません。";}
if ($message == "") { $errMsg .= "本文が入力されていません。";}
mb_send_mail ($to, $subject, $message, $header);
?>
メール送信の前にチェックをして未入力の項目があったら画面にエラーメッセージを表示し、
送信出来ないようにしたいのですが、何を追加したら良いのでしょうか?
$errMsgは配列なのか違うのかはっきりしろや
はじめてのプログラムがメールフォームかよ
スレタイ読め
スレタイ読めとか言っても読まないやつは後を絶たないし、それに答えるやつもいるし もうこのスレの存在意義ないよ
正規表現滅茶苦茶だな
534 :
nobodyさん :2010/03/04(木) 14:43:21 ID:iGtVy898
MYSQL5とPHP5の環境で質問です。 写真とそのコメントを登録するアプリがあるとします。 更新時、必ずクエリの成功と画像登録の成功をセットで行いたいです。 1)コメントと画像を変更する時は、 if($updateRS==1){?画像登録処理} //$updateRSはupdate文の返り値 という流れで問題ないです。 2)コメントは変更しないけど画像だけ変更するとき、この場合はどうしたら良いんでしょう? 2)の場合、mysqlは更新前後で値の変化がない時はupdateの返り値が0なので、 if($updateRS==1){?画像登録処理}という流れができません。 値の変化を伴う場合、変化がない場合にも共通して使えるような update〜画像登録の処理はどうしたら良いでしょうか? 自分で考えたのは、テーブルに適当なダミーカラムを持たせて、 UPDATE $table SET `dummyC` = time() とかすればとりあえず更新が常に発生するかと思ったんですが そんなことのためにカラム作るの嫌だなと… どうしたら良いか、ご意見お願いします。 if($updateRS==1)のチェックをしなきゃ良いんですけど、2)のケースの時に クエリエラーで文章が変化ないのに写真だけ更新される問題が発生しかねないので避けたいです。 それともそんなの気にする必要ないんでしょうか?
phpの質問じゃないだろ
ん?よく読んでないけどなんで画像登録処理単体で実行しちゃだめなの? >2)コメントは変更しないけど画像だけ変更するとき、この場合はどうしたら良いんでしょう? > >if($updateRS==1)のチェックをしなきゃ良いんですけど、2)のケースの時に >クエリエラーで文章が変化ないのに写真だけ更新される問題が発生しかねないので避けたいです。 コメントは変更しないのに何のクエリを発行するの? 文章が変化なくて写真だけ更新されるなら2)の目的を達してるのでは?
537 :
536 :2010/03/04(木) 15:03:12 ID:iGtVy898
ありがとうございます
>>535 sql板で聞くかこちらで聞くか悩んだ末でした。ずれてたらすみません。
>>536 たしかに、コメントが変更されないとわかってればif($updateRS==1)のチェックせず
ストレートに画像登録単体ですれば良いんですが、
その場合コメントがdb登録済みコメントと同じことを確認する処理が必要になるので。。
とりあえず、コメントと画像が更新される前提としてif($updateRS==1)を用意して、
コメント変更がない場合にも柔軟に対応させたいんです。
「画像だけを変更する」「コメントだけを変更する」って機能にすればいいんですけどね…
実際にはコメントにあたるupdate対象のtextarea や inputが30個くらいあるので難しいです。
538 :
nobodyさん :2010/03/04(木) 15:04:03 ID:iGtVy898
あ、間違えた 上の名前欄は
>>534 です。
わかりにくい文章でごめんなさい
毎回コメント変更すればいいんじゃね
time()デリミタコメントで更新して、取り出す時分解すればいいんじゃないか? 普通は更新日時付ければいいものだけどな
541 :
nobodyさん :2010/03/04(木) 16:01:07 ID:iGtVy898
>>539 それはちょっとw
>>540 やっぱり更新日付いれますか…
mysqlのtimestampで設定してるのでムダになっちゃうんですけどね
みんなこういうのどうやってるのかなぁ、ありきたりな処理のはずなんだけど
トランザクション使え
>>537 普通にコメントを上書きすればいいんじゃね?
それが嫌なら、コメントを取得して比較して、同じだったら画像登録処理だけ、違ったらコメント更新と画像登録処理をやればいいのでは?
mysql_query() は DML なら True/False を返すみたいだから、 それで判断すればいいんじゃない? PDOもexecuteは True/False を返すみたいだね。 どっちも使ったことないけど。。。
あ、UPDATEならTrue/Falseなのは間違いじゃないですけど、 DMLてのは間違いでした。すんません。
546 :
541 :2010/03/04(木) 17:01:20 ID:iGtVy898
どうも皆さんすみません なんか、解決じゃないですがアプローチを変えることにしました 皆さんのアドバイス見てるうちに問題の切り分けができてきました。ほんとにありがとう。 以下雑記。。 今までpearのadodbの$db->execute("update〜〜")でやってて、それならupdateでも クエリ成功したら1が返って来てたんですが、zendFWのupdateメソッドに変更したら 行数しか返ってこなくてif($rs==1)の確認ができなくなってたわけです。 問題はFWの知識不足に行き着きそうなので、そっちで考えます。ありがとうございました。
失敗したら例外投げるんじゃね?
うんこ漏れそうなんですが・・・
549 :
541 :2010/03/04(木) 17:32:05 ID:???
>>547 そうなんでしょうか? わざとエラー起こして検証してみます
ありがとう
551 :
548 :2010/03/04(木) 18:23:07 ID:???
漏れたwwwwwwwwwwwwwwwwwwwwww
自治厨惨めでちゅう
553 :
nobodyさん :2010/03/04(木) 22:18:10 ID:Xd0cEYC5
アクセスログを取るPHPスクリプトを書いていてログファイルを一般ユーザーに閲覧してくないという 質問をしたものです。 あのあとPHPファイルとログファイルを置いてあるフォルダに .httacces ファイルを設置し order allow,deny deny from all と設定することで無事ログファイルを非公開にすることが出来ました。 ところでログファイルを置いているフォルダにアクセスログを取るPHPスクリプトも同居させていますが このファイルをサイトから include する分には問題無いんですね。非公開フォルダに置いてあるphpファイル はもしかしたらインクルードできないのではと思っていましたが杞憂のようです。
もうちょっとWebサーバを学んだほうがいいよ
554はチンピラ
チンピラではないがよくわかってないのに知ったかっぽい書き方されるとイラッとくるのはわかる 口にはわざわざ出さないけどな(今出しちゃったけど)
require_onceについて質問なのですが、 /home/lib/にlib.phpとlib2.php /home/www/にhtml.php あるとしてhtml.phpに require_once("../lib/lib.php"); require_once("../lib/lib2.php)"; と書いているのですが、lib.phpとlib2.phpがお互いに参照したくなったので lib.phpにrequire_once("lib2.php"); lib2.phpにrequire_once("lib.php"); と書いても問題ないでしょうか?
559 :
nobodyさん :2010/03/05(金) 05:59:48 ID:8KOlP1UU
postfixで受信したら、phpを起動して実行するということをやりたいのですがうまくいきません。 aliasesには hoge:"|/usr/bin/php /var/www/hogehoge.php" と設定し、newaliasをしてあります。 /var/wwwにあるhogehoge.phpには <?php $pointer=fopen("./test.txt", "w+"); //ファイルを開きます flock($pointer, LOCK_EX); //ファイルをロックします $ntime = date("Y年n月j日h時i分s秒"); fputs($pointer, $ntime."\n"); flock($pointer, LOCK_UN); //ロックを解除します fclose($pointer); //ファイルを閉じます ?> と記述してあります。 コマンドラインからhogehoge.phpは正常に実行でき、test.txtにはタイムスタンプが出力されるのですが、hoge宛にメールを送ってもphpは実行されていません。 postfixのログには postfix/local[28018]: 1EBB65F8269: to=<hoge@****>, relay=local, delay=0.08, delays=0.04/0.02/0/0.02, dsn=2.0.0, status=sent (delivered to command: /usr/bin/php /var/www/hogehoe.php) とあるのでパイプ処理は通ってる気もするのですが。 なにか考えられる原因ってありますでしょうか?
>>559 postfixのログ、
status=sent (delivered to command: /usr/bin/php /var/www/hogehoe.php)
の最後hogehoe.phpとありますが、hogehoge.phpの間違いです。
DB に不正なデータが入っていなかを監視する必要があるのですが、 それを PHPUnit を使ってやっている、という方はいませんか? 自分でバッチ処理を書こうかとも思ったんですが、それでいけるんなら それでやってみたいなと・・・。 本来の使い方とは違う気もしますが、運用の実績があれば聞いてみたいです。 よろしくお願いします。
>>559 実行時のカレントディレクトリにtext.txtができる
./test.txt を /var/www/test.txt にしてみるとか
563 :
nobodyさん :2010/03/05(金) 08:42:39 ID:oScRDulS
【OS名】FreeBSD 【PHPのバージョン】5.2.12 【質問内容】 文字列をASCII値に変換したいと思っています。 1文字ならord()で可能だと思うのですが、複数文字からなる文字列の場合はバラバラにして各文字を変換するしかないのでしょうか? 適切な関数または良い方法があったらお教えください。 よろしくお願いします。
print_r ( unpack("c*","abcd"));
567 :
nobodyさん :2010/03/05(金) 11:29:22 ID:oScRDulS
568 :
nobodyさん :2010/03/05(金) 11:59:02 ID:nN2jzBk7
WebクリエイティブのためのPHPサンプルブック(マイコミ)という本を買って、そのCDからサンプルをダウンロードし「001」の「input.html」を実行し「送信」ボタンを押しました。 するとブラウザに、「 90){ $err.="年齢が適切な値ではありません\n"; }; if(!ereg("^[0-9]{3}$",$_POST['zip1'])){$err.="郵便番号(前半)が適切ではありません\n";} 〜 header("Location: thanks.html"); exit; } 」、と「formmail.php」の内容が途中から全て表示されて意図した動作になりませんでした。 コレはどういう事で、また、どのようにすれば解決するのかを教えて頂きたいです。 色々と試しましたが解決しませんでした。 何か自分のPHP、Apacheの設定がおかしいのでしょうか? それとも、このサンプルのコードがおかしいのでしょうか? サンプルのソースは100行以上あるのでどう説明したらいいのか分かりませんが、ブラウザに表示される前後のコードを書いておきます。 <?php ....... if($_POST['age']<10 || $_POST['age']>90){ $err.="年齢が適切な値ではありません\n"; }; if(!ereg("^[0-9]{3}$",$_POST['zip1'])){$err.="郵便番号(前半)が適切ではありません\n";} ........ header("Location: thanks.html"); exit; } //ここで最後です。 ZFで学んだ通り、?>は省略しております。省略しなくても結果は同じでした。
569 :
568 :2010/03/05(金) 12:01:29 ID:nN2jzBk7
書き忘れましたが、PHPとApacheのバージョンは最新版です
eregは非推奨で将来消えるから使うな
コメントアウトしてあるけど、省略しているというのはショートタグなのか?
573 :
568 :2010/03/05(金) 12:16:54 ID:???
せっかく本買ったならちゃんと最初から読めよw
書籍でログといった複数のプロセスに読み書きされるファイルはflock関数を使って ロックしてから読み書きすると言いと書かれていました。 既に他プロセスによってロックがかけられていればflock関数は失敗するので そのときはsleep(1)で1秒待ってから再度ロックをチャレンジする。そういうのを3回くらい 繰り返すプログラムが書籍に紹介されていました。 でもこのスレではなぜかflock関数は忌み嫌われている印象を受けます。 便利な関数だと思うのですがこのスレでの受けが良くないのはなぜでしょうか?
スレタイを読まないから
apache&PHP環境をセットアップ後に、付属CDから直接PHPファイルを開いて動かないというのは稀によくある
579 :
568 :2010/03/05(金) 12:26:09 ID:???
>>574 もうしわけないです
ただ、このような事やサンプルの置き方は本には書かれておりませんでした
今まであまりにもサンプルをクリックしただけで動作するものに慣れていたので、パスがおかしいとか気が付きませんでした
自分の不注意でした、すみません
flockを使いたければ使えばいいよ 作るのも管理するのもあなたなのだから誰も止めやしない
581 :
568 :2010/03/05(金) 12:27:58 ID:???
>>577 まさに自分がそうでした
今まで全く知りませんでした
お恥ずかしい
>>577 どこにコピーして何のソフトを起動してアドレスバーにどう記述してくださいって
まともな入門書なら書いてあると思うがw
>>582 webプログラム素人は仕方ない
EXE同様に、ダブルクリックで動かないプログラムはバグってると思うんだぜ?
FTPでダウンロードしたローカルにあるファイルを手直ししただけで、
ブラウザで確認したら反映されてないと騒ぐし素人は見ていて飽きないよ
584 :
nobodyさん :2010/03/05(金) 14:16:38 ID:Q1wicMuL
【OS名】Windows Vista Home Edition 【PHPのバージョン】php5.3.0 【質問内容】 外部exeファイルを実行して値を取得できればと考えています。 例えばhoge.exeというテキスト変換プログラムをphpから実行して出力される値を取得したくhoge.exe -t "文字列"というコマンドを実行したいのですが、以下関数を使って $res=system(`./hoge.exe -t ¥"123456¥"`, $ret); $res=passthru(`./hoge.exe -t ¥"123456¥"`, $ret); としてみましたが、Cannot execute a blank commandというエラーが表示されて悩んでいます。 一応DOS窓上でコマンドを叩くと変換された文字列が表示されるのですがphpだと方法が分からず困っております。 よろしくお願いいたします。
`→"
586 :
nobodyさん :2010/03/05(金) 14:51:19 ID:aBGtSP20
こんな会員サイト作りたいんです。 アドレスが●●●を含むリンクをクリックした会員にポイントを付与する これってPHP学べばできますかね? どうやればできますかね?
それだとクリック数を集計するサーバを経由させるリンクの張り方しないと無理っぽいが
>>586 出来ます。
データベース+PHPです。
589 :
584 :2010/03/05(金) 15:05:13 ID:Q1wicMuL
>>585 有難うございます。「`」から「"」に変えてみたところCannot execute a blank commandのエラーは無くなりました。
結果system関数は空を返しましたが、passthruは文字を返してくれました。
ただ新たな問題としてDOS上で叩いたコマンドは10文字以上の文字列を返すのに
php上でpassthruを使ってexeファイルを実行すると1文字しか返さないんですよねぇ…
590 :
nobodyさん :2010/03/05(金) 15:32:04 ID:fG5LjHc7
すみません。 $hoge = ($hoge < 1)? 1 : $hoge; この ? と : なんですけど、 意味が分かりません。ググッテもこういう書き方の説明がありません。 ?と:はどういう意味があるのでしょうか。
592 :
590 :2010/03/05(金) 15:41:13 ID:fG5LjHc7
>>591 ありがとうございます。てことは、この式は↓こういうことですか?
if($hoge<1){
$hoge = 1;
}else{
$hoge = $hoge;
}
(else以降は不要だと思いすが、
>>590 の式の分解として記述しました)
>>592 あってる
というかそれくらいは自分で試そうよ
594 :
590 :2010/03/05(金) 15:48:06 ID:???
ありがとうございました。
595 :
nobodyさん :2010/03/05(金) 18:46:11 ID:NJlwtSqm
【OS名】CentOS 5.4 【PHPのバージョン】php5.12 【連携ソフトウェア】ありません headerで header("test: test1"); という内容で返しているんですが、test1の部分には何か文字数制限などあるんでしょうか? PHPとしては特に制限はないように見えるのですが、そういった制限があるのでしたらどういった制限があるのか教えていただけると助かります。
5.3が最新なのに5.12になんてないと言ったら何度(ry
597 :
nobodyさん :2010/03/05(金) 18:48:00 ID:p18my2+g
【OS名】WinXP SP3
【PHPのバージョン】PHP Version 5.2.11
【連携ソフトウェア】MySQL 5.0.77 + phpMyAdmin
【質問内容】
RSSの取得にSimplePie(1.1.3)と言うパーサを使っています。
http://simplepie.org/ CDATAセクションの拾い方がわからず困っています。
ご存知の方がいらしたら教えてください。
バージョン厨はいつもはりついてるのな
599 :
595 :2010/03/05(金) 18:53:20 ID:NJlwtSqm
>>596 すいません。
バージョンは5.1.6でした。
最新のバージョンを使えればよいのですが、仕様要件で5.1.6で固定されておりますのでご理解いただければと思います。
>>562 ビンゴでした。上手くphpが実行されるようになりました。
ありがとうございました。
Smartyのoutputfilterで文字コードをUTF-8からSJISに変換する処理を入れています。 こんな風に $smarty->register_outputfilter("filterSjis"); function filterSjis($buff, &$smarty) { return mb_convert_encoding($buff,"SJIS-win","UTF-8"); } ブラウザで表示させると頭に「?」が入ってるんだけどこれはなぜでしょうか?
なにか予想外の事態が生じたら exit() でPHPコードを終了するようにプログラムを組みました。 実際その予想外の事態が生じてPHPコードは正しく終了したのですがなぜかそのPHPスクリプトを 呼び出した部分から下のhtmlコードがまるっきし出力されなくなってしまいました。 exit() はPHPだけでなくHTMLの出力をも中止させてしまうようです。 そうではなくて現在実行しているPHPスクリプトだけを中断し、残りのHTMLは問題なく出力させるには どういうコードを書けばいいでしょうか?
あ、自己解決しました
604 :
601 :2010/03/05(金) 22:49:32 ID:???
スレタイもよめない上に解決方法も書かないとは
606 :
601 :2010/03/05(金) 23:29:22 ID:???
すいません、私は
>>602 ではありませんでした
お騒がせしました
話にならないな、コイツ
しかもコイツ、マルチじゃねぇか 人に聞いて解決してるのに自己解決とかぬかしてやがる
609 :
nobodyさん :2010/03/06(土) 10:50:26 ID:6YHfBKj/
条件分岐で質問です。 if文とswith文以外のもので戸惑っています。 1番の意味は2番と同じでしょうか? 1番 $act = $act == 'index' ? 'read' : $act; 2番 if ($act == 'index') { $act = 'read' : $act}; If以外の条件分岐の説明を検索してもなかなか見つからず、 本にもif文しか載っていないものが多く、どうしたものかと。
612 :
nobodyさん :2010/03/06(土) 11:03:21 ID:6YHfBKj/
>>611 ありがとうございます! 三項演算子というのですね。
613 :
nobodyさん :2010/03/06(土) 14:08:10 ID:8pehZnIZ
【OS名】freeBSD 【PHPのバージョン】php5.2.11 【連携ソフトウェア】Apache/1.3.42 【質問内容】 A>B>Cという遷移をするところで、CにPOSTが来ないときがあり、その時に$_SERVERのdumpをしてみたら、以下のような所がありました。 ["REQUEST_METHOD"]=> string(102) "id=9&command=81&quantity[1]=0&quantity[2]=0&quantity[3]=0&quantity%5B4%5D=0&quantity%5POST" このPOSTの前の文字列は、AでPOSTされるべきフォーム達で、Bでは出力していないはずなので、Cには来るはずがないんです。 似たケースに遭遇し、解決した方はおられないでしょうか
エスパーさん出番ですよ
615 :
nobodyさん :2010/03/06(土) 14:33:18 ID:f6Vbrv2v
【OS名】solaris9 【PHPのバージョン】5.2.9(ソースSJIS、zend mb有り) 【質問内容】 セッションスタートした画面で、 $rec[0-9999行][列名(20列)]に、平均20文字程度の文字 という配列を $_SESSION[hoge_Table](仮称)に代入して、headerで画面遷移すると、 セッションがすべて吹っ飛びました。(全部unset) $rec[0-2999行][列名(20列)]に、平均20文字程度の文字 という配列ならOKでした。 9999行と2999行の違いだけですが、どこにも書いてありません。 目盛りはデフォルトの128MBで、上記9999行でもCSVで5MB程度しか 有りません。
617 :
nobodyさん :2010/03/06(土) 14:36:28 ID:f6Vbrv2v
>>616 どの辺を読めばよいのでしょうか?キーワードだけでも!!
セッションにそんだけ入れようとするのも、5MB程度というという感覚も驚きなのだが世代の違いというものなんだろうか・・・ とりあえず設計からやり直した方がいいんでね・・・
だよねー DBかファイル使った法がいいよねー
セッション変数って魔法みたいだよね
最近マンションにすんでるよ
selfとかparentもwindowなんだよね window.self === window 以下略
誤爆
おみゃあさまなにゆうてるだがわがらなぎゃあ
625 :
nobodyさん :2010/03/07(日) 07:20:22 ID:EAtbczi7
今登録フォームみたいなものを作ってるんですが JAVAスクリプトを使わずにPHPでフォームに入力されたパスワードの2重チェックって 可能でしょうか? 1つめに入力されたパスワードと2つ目に入力されたパスワードが一致しなければ アラートを出すという感じです。
無理 アラート出すってのはブラウザ側のコントロールだからJavaScriptが必要 一旦送信してからパスワードが一致しませんというメッセージを出すだけならPHPだけで可能
627 :
nobodyさん :2010/03/07(日) 07:31:49 ID:EAtbczi7
>>626 確かに・・
ありがとう御座います。
一旦送信してからってなると、一旦間違ったままでも送信は完了してしまうって事ですよね?
>>627 一旦送信させて、間違ってたら再入力。
1つ目と2つ目のパスの一致チェックは確認用だからブラウザ側でもチェックしていいけど、
だからといってサーバ側での一致チェックは外すべきじゃない。
630 :
nobodyさん :2010/03/07(日) 08:09:14 ID:EAtbczi7
javascriptのチェックなんかブラウザでjavascriptオフだと全てスルーだぜ サーバ側で全項目チェックしないとだめだお
632 :
nobodyさん :2010/03/07(日) 11:06:00 ID:nTlnSe/q
>>618 とりあえず、
$_SESSION[名前][行][列]というセッション変数にDBからじかに入れる
共通部品をつくって対処しました。全体で大きくても、1つのセッション
変数が小さければセーフみたいです。
しかし、
その落ちる画面遷移のタイミングで、(なにもしていないはずなのに)
かなり時間がかかりました。シリアライズか何かしているのでしょうか?
633 :
nobodyさん :2010/03/07(日) 14:20:21 ID:sojeiGx1
windowsで require /hoge/hoge.php と書くと、相対で hoge/hoge.php を読んでる気がするんだけどそういう仕様ですかね?
jQueryのJSONってeval?
エラーじゃね?
>>633 /hoge/hoge.php を見に行く。
DOCUMENT_ROOT と勘違いしてるんじゃね。そんなの見るわけない
>>634 evalだよ
637 :
nobodyさん :2010/03/07(日) 15:39:11 ID:9X9vAVh2
教えてください。 指定したURLからHTMLを取得してローカルに保存するPHPを作っていますが 内容がgzip形式なので展開してから保存したいと思っています。 そこで、gzuncompressを使ったのですがWarning: gzuncompress(): data errorとなってしまいました。 同じURLがブラウザでは表示できるのだからデータが壊れているわけがない…と思いいろいろ試したところ 一度ファイルに書き出してgzfileを使うとデータが平文になることがわかりました。 そこで質問です。 同じgzipデータなのにgzuncompressとgzfileで結果が違うのはなぜでしょうか。 一度ファイルに書き出さずメモリ上でなんとかする方法はないでしょうか。
638 :
nobodyさん :2010/03/07(日) 15:57:00 ID:nXKvXzTg
SQLの結果を取得するときに while( $row = mysql_fetch_array($ret) ) {....} のように1件ごとに取得して処理してますが、 この$retを何回も最初から使いたい時はどうすればいいでしょうか? $retのポインタ戻そうと思ってreset($ret)とやったり、$cpret = $ret;のようにやってもだめでした。
>>638 何回もデータを取得したいってこと?
$rowを入れた配列を繰り返せばいいじゃん
641 :
nobodyさん :2010/03/07(日) 17:01:29 ID:nXKvXzTg
>>639 while( $row = mysql_fetch_array($ret) ) { $row_array[] = $row;}
で使いまわせました。ありがとうございます。
あと別な質問なのですが、一般的に同じ処理をする場合、PHPで処理するのとSQLで処理するのはどちらがいいんでしょうか?
レンタル鯖でSQLの負荷なるべく少なくするようにPHPでできる部分はPHPでやろうって思ってたのですが、
SQL使いまくった方が全体の負荷的にはいいのかなって疑問がでてきました。
時と場合による 使いまくったほうがとか言ってるレベルではDB使うのやめといたほうがいい
643 :
nobodyさん :2010/03/07(日) 17:05:22 ID:nXKvXzTg
はい、使い分けがわかるようになるまではなるべくPHPで処理させて SQL勉強してきます・・・
644 :
637 :2010/03/07(日) 17:17:37 ID:9X9vAVh2
>>640 あ…php5.2だったので使ってませんでした
ちょっと落としてきます。ありがとうございます。
前スレでgzipの扱いについてレスがあるよ
646 :
nobodyさん :2010/03/07(日) 19:14:55 ID:tE2+VL65
ページングの付け方でつまずいています。教えてください。 ・データを全件表示→10件だけ表示に。 ・ページング部分を表示。([1][2][3].....)の表示と(/index.php?p=2)への移動。 まではできたんですが、 この二つを組み合わせる方法がわかりません。 /index.php?p=2に飛んでも、 /index.phpのときと同じ内容が表示されます。
>>646 GETクエリをDBクエリに埋め込んで件数を指定すりゃおk
>>636 ども!
ただうちのPHP5.3.0だとそういう動きします
以下のファイル配置でa.php、b.phpどっちもちゃんとhoge.phpをインクルードしてくれる
C:\xampp\htdocs\test\a.php
C:\xampp\htdocs\test\b.php
C:\xampp\htdocs\test\hoge.php
・ a.php内容
<?php
require "/hoge.php";
?>
・ b.php内容
<?php
require "hoge.php";
?>
これがバグなのか仕様なのかすっきりしたいわけです
649 :
648 :2010/03/07(日) 19:52:25 ID:sojeiGx1
ID出してなかった・・
>>650 >>651 include_path = ".;C:\xampp\php\PEAR"
.が入ってるから見つからない場合はカレントも見るってことかな?
654 :
nobodyさん :2010/03/08(月) 13:24:47 ID:js+PR+h4
execの質問です。
exec("nmap -sT -P0 -p 12000 ***.***.***.***", $out, $ret);
var_dump($out);
このような処理をping.phpで保存して
http://example.com/ping.php で表示したところ、ダンプした値がarray(0)でした。
SSHより、
php -f ping.php で実行したところ、
正常に
array(7) {
[0]=>
string(0) ""
[1]=>
string(76) "Starting nmap 3.81 (
http://www.insecure.org/nmap/ ) at 2010-03-08 13:21 JST"
[2]=>
string(36) "Interesting ports on ***.***.***:"
[3]=>
string(23) "PORT STATE SERVICE"
[4]=>
string(21) "12000/tcp open cce4x"
[5]=>
string(0) ""
[6]=>
string(64) "Nmap finished: 1 IP address (1 host up) scanned in 0.014 seconds"
}
のように値が入っています。
恐らくexecコマンドは結果を待たずにすぐに値を返すので空っぽになってしまうのだと思いますが、
何か対処法はないでしょうか?
けんげんちゃうん
何でそう思ったの? うちじゃ普通に入るけどなあ
パス通ってないとか
658 :
nobodyさん :2010/03/08(月) 15:08:41 ID:js+PR+h4
権限かな・・・。 apache権限で実行テストする方法ってないですかね su apache だとパスワード求められた、わからないorz
いや、、そんなことないだろ まずはsshで、$ which nmap して そのパスごとexecに書いたら? exec("/usr/bin/nmap・・・ とかさ
そもそも実行できてないならそれなりのエラーメッセージがログに残ってるはずだがな apache権限で実行したいなら、いったんrootになってからsuすれば
661 :
nobodyさん :2010/03/08(月) 15:30:13 ID:js+PR+h4
すんません
レン鯖なのでroot権限もらえないのです
>>659 今ftpUPしてるの終わったら試してみますー
662 :
nobodyさん :2010/03/08(月) 15:36:24 ID:js+PR+h4
/usr/bin/nmap 絶対パスで通してもarray(0){}でした (ちなみにwhich nmapした結果のパスです)
んー、、じゃあ popenでやってみては
--- ブラウザから
resource(2) of type (stream)
--- SSH上から
*****@s152:~> php -f public_html/*****/ping.php
resource(1) of type (stream)
Starting nmap 3.81 (
http://www.insecure.org/nmap/ ) at 2010-03-08 15:46 JST
Interesting ports on ***.***.***.***
PORT STATE SERVICE
12000/tcp open *****
Nmap finished: 1 IP address (1 host up) scanned in 0.015 seconds
popenでwhile(!feof($fp)) {}
で書き出した結果です。
やっぱりブラウザ上からだとうまくいかないです
665 :
nobodyさん :2010/03/08(月) 16:44:56 ID:f9rWk+Yn
このスレにあるだろ
safe mode で実行制限されてたりしない?
669 :
nobodyさん :2010/03/08(月) 17:45:26 ID:js+PR+h4
あー、safemodeみたいですorz これはどうしようもなさそうですね ありがとうございました
670 :
722 :2010/03/08(月) 18:23:37 ID:???
>>637 489 名前: nobodyさん 投稿日: 2009/12/23(水) 00:40:17 ID:5FKPpQ9S
fgetsやCURLでgzip圧縮されたHTTP bodyを元の文字列に復号するにはどうしたらいいのでしょうか
490 名前: nobodyさん 投稿日: 2009/12/23(水) 00:45:48 ID:5FKPpQ9S
gzdecodeは未定義でgzuncompress、gzinflateはデータエラーになりました。
493 名前: nobodyさん 投稿日: 2009/12/23(水) 00:57:59 ID:5FKPpQ9S
自己解決しました。
圧縮されたデータをbase64エンコードしてDATAスキームとして読み込みgzopen -> gzreadしました
$data = curl_exec($ch); //gzip圧縮されたデータ
$data = "data:application/x-gzip;base64,".base64_encode($data); // dataスキームに整形
$fp = gzopen($data,"r"); // gzopen
echo gzread($fp,1024); //読み込み
494 名前: nobodyさん [sage] 投稿日: 2009/12/23(水) 00:59:41 ID:???
file_get_contents("compress.zlib:///home/aaa.gz");
495 名前: nobodyさん 投稿日: 2009/12/23(水) 01:19:52 ID:VLbb10P/
age
496 名前: nobodyさん 投稿日: 2009/12/23(水) 01:27:35 ID:5FKPpQ9S
URLencodeのほうがわずかに軽い?気がする
$data_scheme = "data:application/x-gzip;charset=iso-8859-7,".urlencode(curl_exec($ch));
$fp = gzopen($data_scheme,"r");
echo gzread($fp,524288);
>>669 政治思想と物乞いの区別が付かないのが、チョウセンヒトモドキ
672 :
nobodyさん :2010/03/08(月) 21:20:03 ID:Hw9tq/xF
似たような機能を提供する2つの関数群があります。 片方はよりパフォーマンスがいいので、できればそちらを使いたいのですが、 インストールされていない可能性があります。 その場合条件文で書くと無駄に長くなってしまう可能性があるのですが、 こういうときに自分で同名のメソッドがあるクラスを作ればスッキリすると思うのですがそういう実装方法は一般的ですか? 例えばmysqlとmysqliを例に出すと、 $dbp = null; if (class_exists("MySQLi")) { $dbp = new MySQLi("localhost", "hoge", "foo", "bar"); //略 $dbp->close(); } else { $dbp = mysql_connect("localhost", "hoge", "foo", "bar"); //略 mysql_close($dbp); } となりますが、MySQLiはクラスが用意されてるので、 MyMySQLというクラスを作って、MySQLiのメソッド群を模倣して、 class MyMySQL { private $dbp = null; function MyMySQL($host, $username, $passwd, $dbname) { $this->dbp = mysql_connect($host, $username, $passwd, $dbname); } function close() { mysql_close($this->dbp); } } 続く
673 :
nobodyさん :2010/03/08(月) 21:23:42 ID:Hw9tq/xF
$dbp = null; if (class_exists("MySQLi")) { $dbp = MySQLi("localhost", "hoge", "foo", "bar"); } else { include("MyMySQL.php"); $dbp = MyMySQL("localhost", "hoge", "foo", "bar"); } //略 $dbp->close(); といった感じに、オープン以降は統一できると思うのですが、 こういうやり方はおかしいでしょうか? 何か他にいい方法があったら教えてください。
2つの関数群って何?
675 :
nobodyさん :2010/03/08(月) 21:27:15 ID:Hw9tq/xF
>>674 この例でいうと、mysqlとmysqliのことです。
なんで実際の関数出せないの?
677 :
nobodyさん :2010/03/08(月) 21:55:18 ID:v7y33OYQ
PHPに特化したエディタで //これをコピーして if (a) { print 1; } if (b) { print 2; //ここに貼りつけると } インデントを自動調整して if (a) { print 2; if (b) { print 1; } } こうなるものってありますか? eclipse+javaは出来るのにPHPは対応してなかった・・
>>677 貼り付けるコードの2行目以降を選択してTabキー押せばええんちゃう?
>>677 NetBeansなら右クリック->自動整形で出来る
680 :
672 :2010/03/08(月) 22:06:15 ID:Hw9tq/xF
>>676 私に対してのレスでしょうか?
今後そういうケースに当たったらという話なので、
今そういう壁にあたってるわけではないです。
>>672 それでいいよ
PEAR_DB も Zend_Db_Adapter も同じアプローチ
682 :
nobodyさん :2010/03/08(月) 22:07:34 ID:Hw9tq/xF
>>681 どうもありがとうございます。
Zend_Db_Adapterは初耳ですがそちらのソースも探してきて眺めてみたいと思います。
おまえらおやすみ^^
684 :
nobodyさん :2010/03/09(火) 01:31:56 ID:tXdsqalj
ライセンスについですけどMySQLをコマーシャルライセンスではなくてGPLで利用した場合 mysql(php_mysql)もしくはmysqli(php_mysqli)を利用してMySQLに接続した場合、ライブラリがLGPLではなくてGPLなので それらを利用して作ったプログラムもGPLになってしまいますが、PEARのライブラリである PEAR::DBはPHPライセンスでPEAR::MDB2はBSDライセンスですけどこれらを 利用してMySQLに接続した場合のプログラムのライセンスはどうなるのですか? やはりGPLになるのでしょうか?それとも一端PHPライセンスやBSDライセンスを挟んでいるのでGPL汚染は無くなるのでしょうか?
> PHP 用の GPL ライセンス除外規定とは何ですか。 > PHP と MySQL は互換性のない別々のオープンソースライセンスを導入しているので、 > PHP コミュニティでの MySQL の使用を奨励・促進するために特別な除外規定を設けています。 > これにより MySQL AB では、GPL でライセンスされた MySQL ソフトウェアと、 > PHP ライセンスのバージョン 3.0 でライセンスされたソフトウェアで作成される派生物の頒布を許可しています。 > この際、お客様には、PHP ライセンスのバージョン 3.0 に基づいてライセンスされたコードを除くすべてのコードにおいて、 > GNU General Public License の規定をすべての面で順守することが義務付けられます。 つまりMySQLでなんかしてる部分だけGPLになるってことか? 解釈がよく分からないしMySQLのコミュニティで聞くのが手っ取りばやいんじゃね
>>684 MySQLを利用したソースコードを公開するならGPL
でもGPLだからといって自サーバ内でのみ使うのならソースコードを公開する必要なないんだよ
688 :
nobodyさん :2010/03/09(火) 12:07:28 ID:w/nUscX9
php_mecabを64bitCentOSに入れようとしたのですが、 makeの途中で止まってしまいます 64bitには入らないのでしょうか? インストールに成功した方いますか?
直接コマンドライン叩くことにしますた・・
690 :
nobodyさん :2010/03/09(火) 14:27:52 ID:ezJ3thxT
40万で作ります
692 :
nobodyさん :2010/03/09(火) 15:21:20 ID:FVF0JEpR
file_get_contentsでURLを開いて本文を取得しています。 取得先がPHPでWarningを出している場合、取得しないようにしたいのですが、 「Warning」であると言う事を調べる方法はないでしょうか?
つstrtr
取得しないでどうやってWarning出てるか調べるんだwwww 取得する ↓ preg_replace()でWarningの表記があるか判別 ↓ Warningがなければ値をクリア とかでいいんじゃね? てか、何がしたいのかわからんが、何をしたいか教えてくれれば 他に良いやり方があると思うんだが・・・
preg_replaceで何置換したいんだ?
696 :
694 :2010/03/09(火) 15:27:35 ID:???
matchと間違えたすまんwwwwwwwww
697 :
nobodyさん :2010/03/09(火) 15:49:00 ID:FVF0JEpR
>>694 ちょっとしたリンク集みたいなのを作ってまして、
登録されたURLでWarningが出てるかどうか調べたかったんです。
fsockopenとかで取得先の状態を調べられると思ったのですが、無理なんですね。
やっぱり、一度取得してエラーメッセージを解析する方法しかないのかな。。
699 :
nobodyさん :2010/03/09(火) 16:09:38 ID:FVF0JEpR
マルチって同じ質問あるんですか? 調べてみるのでURL教えて下さい。
700 :
nobodyさん :2010/03/09(火) 21:37:38 ID:tXdsqalj
>>685 そうなんです。問題はそこ。
いったん別のオープンソースライセンスのソースを通った場合はどうなるかって事です。
しかもGPL汚染を受けるのはlibmysqlでPHPライセンスのmysqlndを利用すればGPL汚染も無くなりますよね?
ただmysqlndを使って開発をしたとしても相手の実行環境が必ずしもmysqlndではないって事もありますよね。
特にレンタルサーバの場合、利用者が接続ライブラリを選択なんてできないでしょうから
>>686 ,
>>687 それは知っています。
問題は上記に書いたように「PHP用のGPLライセンス除外規定」と「別のオープンソースライセンスのソースを通った場合」です。
>自サーバ内でのみ使うのならソースコードを公開する必要なないんだよ
それも変わりきっています。
でもGPLになるのは変わりませんよね。
”PHP”の”バイナリ”はPHP Licenseだけど PHP上で動くスクリプトにはライセンス関係ない
GPLになるかどうかのルールは、 GPLのものじゃなくてまず、mysqlの決めたルールに従うんですよ。 汚染とか関係ない。
PHP+MySQLでシンプルな掲示板を作ってます。 一つのテーブルに、書き込みログを30万レコード記録しているのですが、 だんだん処理が重くなってきています。 軽くする場合、どのような方法がありますか?
何の処理が重くなってきたの?
>>704 SELECT * FROM aaa WHERE id LIKE 'abcd'
こんな感じの
単純なクエリーのレスポンスです。
5万レコードなら0.05秒とかで返ってくるのですが、
レコードが増えるにつれ1秒くらい掛かってしまいます。
データ容量の制限もあるので、テーブルを分散させるのが一般的な対処方法ですか?
完全一致ならLIKE使わんほうが速いわ
つ「禁書目録」
クエリのレスポンスが遅いのになんでPHPが関係あると思ったんだよ
いや返ってくるデータが1GBとかだったらPHPが重くならないこともない
>>702 それMySQLがGPLライセンスの意味無くなるぜ。
>mysqlの決めたルールに従うんですよ。
それが正しいなら今頃MySQLはGPLを採用してないで
MyQSL Licenseてライセンスを作っていることでしょう。
ここで従うべき物はMySQLの決めごとではなくて、GPLの決めごと。
>>701 それマジで言っているの?
GPLとかLGPL勉強しなおしてきな。
712 :
nobodyさん :2010/03/10(水) 09:14:18 ID:sEFtoxmN
ヘッダーにいくつか情報載せてやりとりしてるんですが、平文そのままだとあまりよくないので 暗号化でも出来ればと思ってます。 header("test: himitsu"); himituの部分をとりあえずbase64化したのですが、受け取り側でdecodeしたら文字化けしてしまいます。 何か簡単にできる暗号化があれば教えていただけませんか。
文字コードの問題じゃないの?
>>710 MysqlはGPLライセンスではない。
715 :
712 :2010/03/10(水) 10:24:59 ID:sEFtoxmN
>>713 なるほど。
mb_convert_encodingでutf-8とかにしてからやったほうがいいかもしれないですね
ちょっとやってみます
ありがとうございます
そもそもデコードしないで取りだした文字列はどうなってんだよ
ライセンスの話になると必ず見解が違うのなんでだろ〜
どうでもいいから
719 :
nobodyさん :2010/03/10(水) 11:24:48 ID:8zSSeEny
preg_replace_callback( '@^ *(<\?php.*?\?>) *@m', 'hoge', $val ); preg_replace_callback( '@(<\?php.*?\?>)@mi', 'hoge', $val ); こんなソースがあるんですが、正規表現で@を使ってるのを初めて見ました。 この場合の@は/と同じ意味になるんでしょうか?それとも他の意味があるんでしょうか。 教えてください。
同じ 俺は{}派
721 :
nobodyさん :2010/03/10(水) 11:58:02 ID:8zSSeEny
>>720 ありがとうございます。同じなんですね
あともう一つ、
preg_match('!<(/p)>!')
preg_match( "|\n</p>$|")
最初と最後がエクスクラメーションだったり
縦線だったりする時はどういう意味なんでしょうか。
722 :
nobodyさん :2010/03/10(水) 12:07:25 ID:cTVjM4iN
//九九を表示する for ($i = 1; $i <= 9; $i++) { for ($j = 1; $j <=9; $j++) { echo "$i × $j = " . $i * $j . "<br>"; } } を実行すると 1 × 1 = 1 1 × 2 = 2 1 × 3 = 3 ・ 9 × 7 = 63 9 × 8 = 72 9 × 9 = 81 になるのですが、どのような処理を行っているのかイマイチわかりません。どなたかわかりやすく教えていただけませんか
for文外して実行してみるとか、数字変えて実行してみるとかしてみては
725 :
>>722 :2010/03/10(水) 13:33:11 ID:cTVjM4iN
>>723 どうもありがとうございます。もう一度よく考えてみます
>>724 誘導ありがとうございます
726 :
>>722 :2010/03/10(水) 13:39:24 ID:cTVjM4iN
>つまり、forループ1 の 1回の処理に対して、forループ2 は最後まで回りきる ググったら↑の文を見つけて解決しました。答えてくださった方ありがとうございました
727 :
nobodyさん :2010/03/10(水) 14:06:28 ID:8jD6opA3
$a = 1; $b = 2; $ex = '+'; echo $a.$ex.$b; というコードがあるとして出力すると「1+2」となります。 結果として「3」が表示されて欲しいのですが、 上記のように式を変数で置き換えるのは駄目なのでしょうか?
変数に代入した文字はあくまでも文字であって演算子ではないのでR
>>717 見解の違いどころか
>>714 みたいなトンチンカンも現れた。
MySQLはGPLかコマーシャルライセンスかのデュアルライセンスを採用している。
730 :
nobodyさん :2010/03/10(水) 14:27:38 ID:pOogiIvE
URLに対してコメントを蓄積するという仕組みはどう書けばいいの?
日本語で
>>729 コマーシャルライセンスでない方はGPLに従えばいいのか?
>>730 はてなブックマークみたいな物を作りたいのか?
>>732 そういうこと。
>>714 みたいな馬鹿はもうMySQLのライセンス違反していそうだけどね。
>>714 がつとめているソフトハウスさんは大変だ。
736 :
nobodyさん :2010/03/10(水) 15:43:30 ID:pOogiIvE
>>736 ざっとしかみてないがそこに全部書いてあるんじゃ?
738 :
nobodyさん :2010/03/10(水) 15:47:04 ID:PG8HaZ2b
ディレクトリごとにあるhtmlを表示させるために、 <?if(stristr($_SERVER['PHP_SELF'], "/index.php")){echo " hoge";}?> <?if(stristr($_SERVER['PHP_SELF'], "/2/index.php")){echo " hoge";}?> <?if(stristr($_SERVER['PHP_SELF'], "/3/index.php")){echo " hoge";}?> としたいのですが、 TOPページは、URL/index.phpのため、大丈夫なのですが、 その他ページでは、URL/2/index.phpな為、 1行目の/index.phpも含まれ、2つ表示されてしまいます。 回避する方法は有りますでしょうか??
740 :
nobodyさん :2010/03/10(水) 16:13:38 ID:PG8HaZ2b
>>738 >>739 意味はわかるのですが、書き方が分かりません。。。
例えばどの様に書けば出来ますでしょうか??
>>740 <?〜?>ブロック外れても構文解析してくれるから普通と同じように書いて大丈夫だよ
742 :
nobodyさん :2010/03/10(水) 16:40:06 ID:PG8HaZ2b
>>738 >>741 ありがとうございます。ただ、私は素人なもので、全くかけないのです。
よろしければ、サンプルで書いていただけませんか?
よろしくないのでそれくらい自分で書いてください
745 :
nobodyさん :2010/03/10(水) 16:48:09 ID:PG8HaZ2b
PHPって<?php ?> って書かないとだめ? <%= %> こういうのは無い?
おまいら サンクス phpiniの設定が必要なのか
750 :
nobodyさん :2010/03/10(水) 17:09:16 ID:PG8HaZ2b
>>738 >>743 >>744 以下では間違えてますよね。
条件を満たす方法がわからないのですが、どうすればよいのでしょうか??
<?if(stristr($_SERVER['PHP_SELF'], "/index.php")){echo "hoge";}elseif(stristr($_SERVER['PHP_SELF'], "/2/index.php")){echo "huga"";}?>
<?if(stristr($_SERVER['PHP_SELF'], "/2/index.php")){echo " hoge";}?>
<?if(stristr($_SERVER['PHP_SELF'], "/3/index.php")){echo " hoge";}?>
751 :
nobodyさん :2010/03/10(水) 17:10:26 ID:8c82Xkrk
PHP初級者だけど、誰かSkypeで話そう。 一緒に勉強してサイト作ろうぜ!
>>750 何をしたいかよくわからんが、まずその'index.php'って記述はいるのか?
754 :
nobodyさん :2010/03/10(水) 17:16:54 ID:8c82Xkrk
ここ質問スレかorz
755 :
nobodyさん :2010/03/10(水) 17:20:53 ID:PG8HaZ2b
>>738 >>753 例えば、
URL/index.php
のページにhogeを出力
URL/2/index.php
のページにhugaを出力
といったふうにしたいのです。
ただ、自分の書き方だと、
URL/2/index.php
のページにはhoge、hugaともに出てしまうということです。
756 :
nobodyさん :2010/03/10(水) 17:25:56 ID:8c82Xkrk
まずstristrを使う意味がよくわからないし、 if($_SERVER['PHP_SELF'] == /index.php){ hoge } elseif($_SERVER['PHP_SELF'] == /2/index.php){ huga } でいいんじゃないですか???
PHPはよくしらないけど <?if(stristr($_SERVER['PHP_SELF'], "/index.php") == 0){echo " hoge";}?> でいいんじゃ
例えばじゃなくて実際の話しろよ 回答者をなめくさってんの?
759 :
nobodyさん :2010/03/10(水) 17:28:23 ID:8c82Xkrk
まずstristrを使う意味がよくわからないし、 if($_SERVER['PHP_SELF'] == /index.php){ hoge } elseif($_SERVER['PHP_SELF'] == /2/index.php){ huga } でいいんじゃないですか???
if(preg_match('/¥d+/',$_SERVER['PHP_SELF'])) { echo 'hoge'; } else { echo 'fuge'; } かな
えっw
762 :
nobodyさん :2010/03/10(水) 17:41:28 ID:8c82Xkrk
サイト作りたいんだけど誰か共作しませんか?
いいよ
764 :
nobodyさん :2010/03/10(水) 17:45:16 ID:8c82Xkrk
おお、ありがとうございます! 連絡取りたいんでSkypeって持ってますか?
持ってないです
766 :
nobodyさん :2010/03/10(水) 17:52:33 ID:8c82Xkrk
767 :
nobodyさん :2010/03/10(水) 18:01:38 ID:8c82Xkrk
誰も来ないorz
なんでわざわざチャット? 中学生かなんか?
769 :
nobodyさん :2010/03/10(水) 18:06:00 ID:8c82Xkrk
Skypeないし、メアドもここじゃ晒せないんで、 連絡手段なくないですか?
770 :
nobodyさん :2010/03/10(水) 18:10:02 ID:8c82Xkrk
IDないと誰が誰だかわからない・・・
共作ってどんな感じでやるの?
Subversionの鯖誰が用意すんの?
何をつくるの?
774 :
nobodyさん :2010/03/10(水) 18:17:53 ID:8c82Xkrk
アイディア出して役割分担してやる感じです。 自分は基本的なことしかできないんですがw 鯖はレンタルサーバーです
お前らスレ違いだからそのチャットで聞いてくれよ
776 :
nobodyさん :2010/03/10(水) 18:18:51 ID:PG8HaZ2b
>>738 >>758 例えば、というかほとんどそのままなんですが、
<li<?if(stristr($_SERVER['PHP_SELF'], "/index.php")){echo " class=\"hoge\"";}?> ><a href="">index</a></li>
<li <?if(stristr($_SERVER['PHP_SELF'], "/1/index.php")){echo " class=\"hoge\"";}?>><a href="/1/">1</a></li>
<li <?if(stristr($_SERVER['PHP_SELF'], "/2/index.php")){echo " class=\"hoge\"";}?>><a href="/2/">2</a></li>
のようなナビゲーションをインクルードさせて読み込ませているという意味でした。
該当URL表示時にclass="hoge"を出したかったのですが、上記回答頂いた方もものだと、出来ませんでした。
ご回答頂いた方ありがとうございます。
777 :
nobodyさん :2010/03/10(水) 18:21:11 ID:8c82Xkrk
すいません 以後チャットで話します。。
お前の物は俺の物 俺の物は俺の物
新手の個人情報引き出し詐欺w
781 :
nobodyさん :2010/03/10(水) 19:58:42 ID:wG/HRXu2
PHPで、日本語文字列(UTF-8)を ???? みたいなエンティティに変換するのってどうやるのですか? ぐぐってurlencodeや、htmlentitiesというのを使ってみたけど、望む出力は出ないようです。
782 :
nobodyさん :2010/03/10(水) 19:59:59 ID:wG/HRXu2
文字化けた… &#12392;&#12371;&#12429;&#12391; 全角なら大丈夫かな。こういう出力が欲しい。
$string = "はいはいワロスワロス"; $result = mb_convert_encoding($string , "Unicode" , "UTF-8"); $length = mb_strlen($result , "Unicode"); $i = 0; for($i = 0; $i < $length; $i ++){ echo "?" . bindec(mb_substr($result , $i , 1 , "Unicode")) . ";"; } たぶんこう
$string = "はいはいワロスワロス"; $result = mb_convert_encoding($string , "Unicode" , "UTF-8"); $length = mb_strlen($result , "Unicode"); $i = 0; for($i = 0; $i < $length; $i ++){ echo "&#x" . bin2hex(mb_substr($result , $i , 1 , "Unicode")) . ";"; } bindecは別の関数だった
配列の要素を削除して、全体の個数と添え字のナンバーがずれないように出来ますか。 $A=array(1,2,3,4); print_r($A); unset($A[2]); print_r($A); これだと添え字が個数とずれるんですが。
786 :
nobodyさん :2010/03/10(水) 22:24:45 ID:UhmzcxdA
IDだします。 C++STLのように配列範囲を削除出来ると良いんですが。 添え字が連想配列に強制で入れられるのも不便なこともあります。
787 :
nobodyさん :2010/03/10(水) 22:28:02 ID:UhmzcxdA
自己解決 $A=array(1,2,3,4); print_r($A); unset($A[2]); $A=array_values($A); print_r($A);
788 :
nobodyさん :2010/03/10(水) 22:35:48 ID:pOogiIvE
Warning: pg_connect() [function.pg-connect] この警告って何? phpで掲示板作ってたら出てきた
>>788 その続きはないの?
出力されたHTMLのソース見ても何か書いてないかい?
pg-connect←こんな関数ないってことじゃ?
791 :
◆1tWDDRpr5. :2010/03/10(水) 23:12:52 ID:oEz4W3Cx
PHPとMySQLを連携させたスクリプトを作っているのですが、 mysql_query("select * from Database where id={$_GET["i"]};", $db); 等としたときに、{$_GET["i"]}の部分に何らかの文字列を入れることによってテーブルの破壊をされたりする危険性はありますか? もしあるなら、対策法などを教えてください。
入るものをチェックすればいい。
>>791 SQLインジェクション で Wikipediaでも見て下さい。
796 :
nobodyさん :2010/03/11(木) 00:00:27 ID:uZgmI9An
「配列を再帰的に処理する」とか「再帰的に置換する」とかの再帰的って何?
>>796 PHPどころかプログラミングでの常識レベルの事すら知らない?
なぜ検索すらしないんだろう・・・
連想配列のn番目を取り出す方法ありますか
>>791 フォーム入力欄に副クエリーとかテーブル結合とかまで入れて、
サーバーに過度の負荷を与えたりとか。
入力欄「abc or id = (select * from (select * from (select * from(....) )))」
id=の後をダブルクオーテーションで囲んで、794を参照。
802 :
nobodyさん :2010/03/11(木) 00:43:05 ID:uZgmI9An
>>802 わかっているからこそプログラミングでの常識レベルと判断できるのですかなにか?
本当に
>>798 の状態ですよね。
>>802 >>796 の質問ってネタだよな?
あまりに馬鹿な質問するなよ。
最後に釣れたって言うんだろ?
805 :
nobodyさん :2010/03/11(木) 01:01:25 ID:uZgmI9An
もういいやバカは。 的確に説明できる人いませんか?
本当に説明出来る人がいない気がしてきた
>>808 =ID:uZgmI9An
説明できるのいないと言うが再起処理って初歩中の初歩。
説明するのがばからしい。こんな初歩すら自分で調べられない馬鹿には仮に説明したところで理解できないね。
くだスレなんだから説明してやりゃいいじゃん これからphpはwww
PHPの話じゃないだろ
再起処理のどこがPHP?
アルゴリズムの問題だろ。
>>810 =
>>808 =ID:uZgmI9An必死すぎるぞ。
くだらないどころかゴミ質問。
814 :
nobodyさん :2010/03/11(木) 02:01:23 ID:S9Wmg552
>>791 IDチョックは簡単だぞ
IDを数字にすればOK
ここまで説明なし
ここまでID:uZgmI9Anの謝罪なし
下らねぇ質問はID出して書き込みやがれ (ただし再帰は除く)
>◆質問する時の注意 >・ 質問者として、態度をわきまえること。 >・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
それでは次の質問をどうぞ
820 :
nobodyさん :2010/03/11(木) 05:40:39 ID:uZgmI9An
んじゃrecurs…いや、何でもない。 じゃ、文字列から「(」と「)」の間の文字を取り除くにはどうしたらいいでちゅか? ただし「(」と「)」は入れ子になっている可能性がありまちゅ。 //わからない人は出てこなくていいでちゅよ。
金もなくてブサメンならやることは一つなんだけどなあ
>>820 入れ子になっている可能性も考えるともう正規表現だと無理があるかな。
文字列を1文字1文字再帰的に処理して行く。
こういう時ってCのchar型変数の方が楽だよね。 文字列としても文字としても簡単に扱えるから。
825 :
nobodyさん :2010/03/11(木) 06:19:09 ID:uZgmI9An
あれえ? preg使えたら言明で一発じゃなかったでちゅかあ?
>>825 だったらやればいいじゃん。入れ子はどう考慮するか理解してないようだけどね。
どっちにしても再起処理は不可欠だね。
この板で初めて迷惑レスあぼーんを使った
下らねぇ質問に答えられないスレはここですか?
なんでNG指定とか使わないんだろう。
830 :
nobodyさん :2010/03/11(木) 11:07:09 ID:1xNa3qka
【OS名】fedora12 【PHPのバージョン】php5.31 【連携ソフトウェア】ImageMAGIC ImageMAGICを使いgifのサムネイルを作っています。 サイズがどうしても重くなるので、最初の5フレームだけ抜き出すようにしました。 元画像を分割 convert +adjoin a.gif /tmp/image%04d.gif 分割された画像0〜4までを結合&リサイズ convert -adjoin -loop 0 -delay 20 /tmp/image0000.gif /tmp/image0001.gif /tmp/image0002.gif /tmp/image0003.gif /tmp/image0004.gif -resize $150x150\> as.gif しかしこのやり方では場合によっては処理に1分以上かかることがあります、非常に重いです。 ImageMAGICではおそらくどんなやり方をしてもこの処理時間は縮めるのは難しいと指摘されました もっと軽くて効率的なやり方はないでしょうか?どうぞよろしくお願いしますm(__)m
832 :
nobodyさん :2010/03/11(木) 11:31:58 ID:G8nMSG6F
ところで再帰的って何ですか?
833 :
nobodyさん :2010/03/11(木) 12:10:43 ID:0kmM8iNj
>>832 例えば、サーバのフォルダ構造を想像して
/hoge/huga/aaa.php
/hoge/huga/bbb.php
/hoge/hoge/ccc.php
/hoge/hoge/ddd.php
ってなってた時、4つ全てのファイルの処理をする場合に
「/hoge/以下を再帰的に処理する」なんていいますね。
834 :
nobodyさん :2010/03/11(木) 12:17:12 ID:0kmM8iNj
文字コード合わせろ
人は繰り返し、神は再帰する。
>>837 時刻ベースならmicrotime()
ランダムならuniqid()
839 :
nobodyさん :2010/03/11(木) 12:50:46 ID:w3xbnBCu
PHPからMySQLのシステム変数を見たいんだけど、 selectじゃなくてshowなのでフェッチできない。 さてどうしたらいいかな。
やったことないけどsystemでできるんじゃね?
841 :
834 :2010/03/11(木) 13:18:42 ID:0kmM8iNj
改行コードが除去されてるだけじゃん
何に使うつもりなんだ・・・?
printf() で %%02X で1文字ずつ出したら? 文字列から文字コードはord()なりunpackなりで
846 :
834 :2010/03/11(木) 17:14:21 ID:0kmM8iNj
ごめんなさい
>>843 のおっしゃるとおり英数文字は変換されていなかったです…
urlencode()した文字列と件のサイトで変換した文字列を見比べているつもりが
関係無い文字列を見比べてました。
もう日が暮れる;;
おそらく
>>842 さんご指摘の改行コードとあとはurlencodeが変換しない「+」をstr_replaceとかで
変換すればいけそうです。
コレアン美人
849 :
nobodyさん :2010/03/12(金) 06:26:13 ID:eE8Qh1j0
<?php echo $_POST["test"]; echo '<form method="post" action="test3.php"><input type="text" name="test" /><input type="submit" value="Check" /></form>'; ?> テキストボックスに "hoge" と入力して送信すると \"hoge\" と表示されます。 この \ が勝手に付加されてしまうのですが、 これはそういうもんなのでしょうか? よろしくお願いします。 POSTされたデータの " を \"、 / を \/ [ を \[ ・・・ みたいな変換をしていたのですが、"だけ\\" になってしまったので、なんか統一感がないなぁ、程度の悩みです。
851 :
nobodyさん :2010/03/12(金) 08:35:11 ID:eE8Qh1j0
>>850 これが知りたかったのです。
ありがとうございました。
852 :
nobodyさん :2010/03/12(金) 09:55:06 ID:Yfu1bPWM
【OS名】winxp(32bit) 【PHPのバージョン】php5.2.1 【質問内容】 intの最大値が32bitの環境で64bitの整数を使いたいのですが、 方法ありませんか?
854 :
nobodyさん :2010/03/12(金) 10:35:58 ID:Yfu1bPWM
>>853 ありがとうございます!
解決しました。
855 :
830 :2010/03/12(金) 10:42:54 ID:HJClOaz1
私の方も分かる方よろしくお願いしますm(__)m
わからないです
GD使えば早くなるんじゃね? GD アニメgif php でぐぐったら出てきたぜ
>>855 convert -resize 100x100 src.gif[0-4] thumb.gif
859 :
nobodyさん :2010/03/12(金) 14:48:01 ID:cUrmnSSn
くだらない質問失礼します。 元々C/C++などのコンパイル言語ということもあり、疑問がありまして。 PHPにもrequireやincludeといった素晴らしい機構があるのですが、 これの引数には変数を指定することができるようです。 となると、PHPというのはincludeなどの展開は実行時に毎回行っているということになりますよね? PHPはアクセスがあるたびに ・ソースコード解釈 ・コンパイル ・実行 をやっているのでしょうか? それともコンパイル済みの中間ファイルあたりをどこかに持っていて、ソースコードが更新されていなければそちらを使っているのでしょうか?(ファイルの更新日時あたりを利用して) そして、どちらにしろincludeなどは実行時に動的に読み込まれると。 単にファイルを分割したいだけなので、変数などが使えない高速のincludeなどが欲しいのですが、それは無いものでしょうか? 色々な質問がまざってすいません。
>>859 中間ファイルをキャッシュするためには各種アクセラレータが必要です
APCとかeAcceleratorあたりでググってみて下さい
>それともコンパイル済みの中間ファイルあたりをどこかに持っていて、ソースコードが更新されていなければそちらを使っているのでしょうか? 処理系に依ります。 Cだってインタープリタがありますし、CやC++でもincludeされる部分は最初に一回だけ コンパイルして(それが変更されない限り)コンパイル済みコードを再利用するものがあります。 PHPだからとかCだからのように言語で言う話ではないのです、実際のところ。
噂のCppコンパイラさんがPHP下スレに質問に来ていると聞いて飛んできました
飛んできたからなんなんだよハゲ
864 :
nobodyさん :2010/03/12(金) 17:03:24 ID:cUrmnSSn
>>860 ありがとうございます。
基本的には毎回コンパイルするイメージなんですね。
元々スピードを求める言語ではないので、それで納得しておこうと思います。
APCなどについてはこれから調べてみます。ちょっと見てみた感じ、とても良さそうですね。
PHPspot作のPHPエディタを使用しています ですが、対応バージョンがPHP5.0までのようで、新たに追加されたクラスや例外などの関数名がハイライトされません ユーザ関数として登録もできるのですが、システム関数との見分けがつかなくなるのでなんとかしたいです PHPエディタ作者は、要望掲示板の内容を読んでいないようで、対応の見込みが無いのですが 他のエディタで、プロジェクト管理機能とテンプレート機能を持つPHPエディタはないでしょうか?
EclipseかNetBeans
868 :
nobodyさん :2010/03/12(金) 19:57:19 ID:NKXaLgFF
なんでPHPが多いの?
ナウだから
870 :
nobodyさん :2010/03/12(金) 20:30:47 ID:sa3ugaEO
APIで1秒間のリクエスト回数がn回以下であると制限されているものがあるとき、 n回以下でリクエストするためにはどうしたらよいでしょうか?
sleep
872 :
nobodyさん :2010/03/12(金) 20:34:43 ID:sa3ugaEO
詳しいことはわからないのですが、 ひとりのユーザーがphpを実行しているのではなく、複数のユーザーが実行している時でも sleepで対応できるのでしょうか?
セマフォ
>>870 リクエストの度にタイムスタンプ(microtime)を記述したファイルを生成。
また、PHP実行の度に、そのタイムスタンプを読み込み、例えば制限が「1秒に10回まで」なら、
(現在時-タイムスタンプ)が0.1秒以上でないとリクエストしない、とか。
データベースにタイムスタンプをインサートしていって 最新の10件を取り出して一番古いのが1秒居ないだったら待機
膨大な量のログが蓄積されるけどいいのかw
877 :
nobodyさん :2010/03/12(金) 21:07:16 ID:sa3ugaEO
ありがとうございます。874で行ってみようと思います。
1秒間に10回も20回も単一ファイルを読み書きするの?
879 :
nobodyさん :2010/03/12(金) 22:20:23 ID:sa3ugaEO
それは複数のユーザがアクセスするスクリプトなの? なんか制限のあるAPI使うってことはユーザリストと処理内容を元に自分で処理するような気がするんだけど
モニタオブジェクト通しゃいいじゃん。 モニタは、過去1秒なら1秒間のリクエストの記録(オンメモリ)を保持して、 10個を超えそうならリクエスト拒否。 リクエストが来た時点で記録を調べて、1秒以上古いのは捨てる。 ファイルもDBの要らんでしょ。
むしろAPI側でうまいこと処理してくれるんちゃうん
実際には「1秒1回」制限のところも、厳密に1秒1回を計測している訳ではなく、 サーバー負荷が大きくなって初めて調べられて連絡が来るというパターンが多い。 ある時には1秒3回あっても、平均を取ると60秒に20回とかなら、まず文句言われない。 しかも、アフィリエイト系APIの場合には、儲かっていると基準が甘くなったりする。 以上、経験論ではあるけど、例外があったらゴメンナサイ。
884 :
nobodyさん :2010/03/13(土) 06:06:30 ID:GjD8zhAG
質問です; DBから取ってきたリストをforeachでぐるぐる回してるんですが、 一行評価する度に消えちゃうじゃないですか。 もっかい読み出すっていう関数は無いでしょうか。 <?php foreach( $data["datas"] as $data ){ if($data["category"]==1){
885 :
nobodyさん :2010/03/13(土) 06:12:36 ID:GjD8zhAG
ミスった; (あんま関係ないけど)cheetan使ってまして、 MySQLのテーブルにname,categoryとあったとして、 ビューで呼び出す側のindex_.html側で <?php foreach( $data["datas"] as $data ){ if($data["category"]==1){ echo $data["name"]; } } foreach( $data["datas"] as $data ){ if($data["category"]==2){ echo $data["name"];(上と全く同じ処理) } }?>みたいな事をやって結果的に category 1の人は Aさん、Cさん、Eさん category 2の人は Bさん、Dさん みたいに出力したいのですが、 なんか根本的に処理がおかしい気が自分でもしてます;
886 :
nobodyさん :2010/03/13(土) 06:19:34 ID:TPMaSDUC
同じ悩みを数日前にぶちあたったものですが、 リソースから1行ずつ取り出して新たに配列作れば使いまわせたんで、 とりあえずそうしてます。 $result = mysql_query($sql,$con); while( $row = mysql_fetch_array($result) ){ $data[] = $row; }
>>885 はfetchの問題じゃないと思うけど
俺だったらcategoryをキーにした連想配列に入れて再度ループして表示するか
予めカテゴリ別に取得して表示するか
DBのAPI利用してグループ化して取得して表示するかする
888 :
nobodyさん :2010/03/13(土) 06:42:00 ID:GjD8zhAG
みんなレスサンクス;
>>886 配列に入れてからfor文でまわすのを
繰り返すっていう事でしょうか。
>>887 DBもっかい取ってくるってのは、その分SELECT文が
走るって事ですよね。サーバのHDD負荷をできる限り減らしたい
ので、みんなどうしてるんだろなって。
HTML出力する時に、HTMLって上から下に書かないといけない
じゃないですか;前に戻って書けないというか。
やっぱぐるぐる回すしかないんですかね;
>>888 いやDBもっかい取ってくるのは3行目だけだが。
あと別にHTML出力は変数に入れて最後にまとめて表示してもいいし、
887で書いたのはロジックを先に処理してあとで表示する方法
つまりこういうこった <?php foreach( $result as $row ){ if($row["category"]==1){ $temp .= $row["name"]; }elseif($row["category"]==2){ $temp2 .= $row["name"]; } } echo $temp . $temp2; ?>
でも処理が同じなら、SQLでカテゴリーに対してorder by かける方がスマートだろうな
つswitch
switch遅いって俺は聞いたぞ
Q
708 名前:デフォルトの名無しさん 投稿日:2005/05/11(水) 23:22:55
20通りくらいのパターンをswitch文を使って表しているのですが、
switchは遅いという情報を見つけました。
ifで表現したら速くなりますか?
A
基本的には気にする必要なし。
switchの分岐が多すぎることの方が問題。
710 名前:デフォルトの名無しさん 投稿日:2005/05/11(水) 23:26:16
>>708 君が気にする程違うわけでもなし、
気にしないといけない程
クリティカルなプログラムも書かないだろうし、
何よりコンパイラのオプティマイザに任せた方が
余程いい結果が得られる。
711 名前:デフォルトの名無しさん 投稿日:2005/05/11(水) 23:27:48
そもそも case や else がアホみたいに出てくるのは
良くない設計の兆候。まずは設計を見直せ。
714 名前:デフォルトの名無しさん 投稿日:2005/05/11(水) 23:42:02
>>708 switchをジャンプテーブルに変換してくれるコンパイラならifより速い
つまり最初からifで書いてれば問題無しってこった
初歩中の初歩ですまん html内に出来るだけ短いphpで画像をランダム表示させようとしてるんだけれど、どうしてもうまくいかない。 <?php $num = rand(1,200); print "<img src=\"imagfile\{$num}.jpg\">\n"; ?> まだ始めたてでスレ内のレベルの高さにgkbrしてるけど、お願い
print "<img src=\"imagfile{$num}.jpg\">\n";
898 :
nobodyさん :2010/03/14(日) 03:08:12 ID:P9+VbQHb
>>ALL レス遅くなってゴメン&レスありがと 結局こうなった…。 foreach($data["datas"] as $data){ $temp=(そのレコード行に対するタグを延々出力); $temp.=$data["name"]; $temp.=(そのレコード行に対するタグを延々出力); $cate[$data["category"]][]=$temp; } とやっておいて echo "<h1>category 1の人は</h1>"; for($i=0;$i<count($cate[1]);$i++){ echo $cate[1][$i]; } echo "<h2>category 2の人は</h2>"; for($i=0;$i<count($cate[2]);$i++){ echo $cate[2][$i]; } …以下続く とりあえず出力は期待通りになったけど、正直、なんか納得 いってないw しかしみんなありがとう。
899 :
nobodyさん :2010/03/14(日) 03:16:00 ID:P9+VbQHb
連ゴメ
>>891 それだ!w PHP側でメモリの操作でやるのとorder byでソート
させとくのとどっちが高負荷でどっちが処理的に高速、また
効率良しなんでしょうかね。あんま拘るとこじゃないか…。
>>892 今回のと関係ないんですけど、他の記載箇所で、
全然平気でcase:1〜case:100とか出てくるんですが、やっぱダメです
よね…。用途は、さっきのcategoryが0-99あるとして、
対応する文字列を出力してるんですが、ほんとはDBに入れて
アソシエーションっていうんでしょうか、そっから引っ張ってくるべき
なのかなとか思ってました。。どうなんでしょうか。。
気になるならベンチ計ってみればいいじゃない
そうだそうだ、ぐだぐだ言ってないで計ってみやがれってんだ
メジャーはどこにありますか?
904 :
nobodyさん :2010/03/14(日) 20:43:36 ID:afDdQzXD
下記の書き方、AとBではどちらがよい書き方なのでしょうか? 見やすさからBで書いてましたが、順番に処理を実行できるという意味では、 Aが正しい書き方な気がするのです。 【書き方A】 if (!empty($this->data)) { $this->Book->create(); if ($this->Book->saveall($this->data)) { $this->redirect(array('action' => 'index')); } 【書き方B】 if (!empty($this->data)) { $this->Book->create(); $this->Book->saveall($this->data); $this->redirect(array('action' => 'index')); }
保存に成功したかを判定したい時はAでしなくてもいい時はBにすればいいのでは?
906 :
nobodyさん :2010/03/14(日) 20:58:12 ID:afDdQzXD
なるほど。 シンプルな考え方ですね。 ありがとうございます。
CakePHPっぽいけど saveAll()って失敗してもtrue返ってくるんじゃなかったっけ
908 :
nobodyさん :2010/03/15(月) 01:57:58 ID:uc4oih1J
>>907 はい、CAKEPHPです。
ということは、常にAのような書き方をしたほうがよいということでしょうか?
すみません、発言の内容がよくわからなくて。
909 :
nobodyさん :2010/03/15(月) 02:11:15 ID:7k3Do5eS
変数に関数の名前を入れて その変数から呼び出すことってできますか? ↓こんな感じな事を想像してるのですが $func = "strcmp"; if (!$func("文字1", "文字2")) { echo "一致"; }
911 :
909 :2010/03/15(月) 02:26:07 ID:7k3Do5eS
>>910 Σ(´∀`;) できるのですかっ
スイマセン 試せばよかったですね ; ;
ありがとうごさいました!
912 :
nobodyさん :2010/03/15(月) 06:24:34 ID:wB2/C/Du
共用サーバーでサイトを構築しているのですが重いです。 ただ、毎回重いわけではなくリロードすると5回に1回くらいの割合で重くなります。 なにぶん初めてサイトを作っているので、これがスクリプトに問題があるのか サーバーに問題があるのか、CSSに問題があるのかわかりません。 私的にはスクリプトが原因なら毎回重くなるハズだからサーバーかな?と思っているのですが スクリプトに原因があったとしても読み込み速度が毎回大幅に違うという可能性はあるのでしょうか?
ローカルで試して問題なければサーバが原因
・ob_startのコールバックで処理時間ログ取れ ・FireBugで接続時間の計測 これで切り分けな
915 :
nobodyさん :2010/03/15(月) 11:53:49 ID:ToDwupd9
失礼します。 質問です。 一度定義された関数を、未定義状態に戻す。もしくは上書き定義することはできますでしょうか? また同様に、クラスはどうでしょうか? ---------- require("app_hoge"); // ここの中でfuncという名前の関数が定義されている。 func(); //ここでfuncの定義を消したい require("app_test"); // ここの中でもfuncが定義されている ---------- 現状ですと、下記のようなエラーとなります。 Fatal error: Cannot redeclare func()
方法はあるんだけど根本的におかしいから直したほうがいいと思うよ
同じものだったら、 function_existsでチェックしてから定義とかあるけど・・・ 違うものなら、名前変えようよ。
5.3以降ならnamespaceとか
override_function('func', '$hoge', 'return $hoge + 1;'); or runkit_function_remove('func'); どちらもインストールされてる環境のほうが稀
複数のライブラリを使う時の関数名前衝突にもつながる問題だが・・・ あれ?みんなどうやってんだ?
普通は衝突しないように関数名の先頭にライブラリ固有のprefixをつけるか、クラスつかうんちゃうん?
>>920 複数のライブラリがfunctionの集まりならそうかもしれんが、普通はclassだからぶつからない
923 :
nobodyさん :2010/03/15(月) 13:42:29 ID:R2wjg7Ee
mb_convert_encodingで文字コードを変更出来ますが、ファイルそのものの文字コードを変更するにはどの関数を使えばよいのでしょうか?
>>923 file_get_contentsで読み込んで
mb_convert_encodingで変換して
file_put_contentsで吐き出すとか。
俺ならexecでnkf使っちゃうけど。
普通はぶつからない
普通はぶつからない(キリッ だっておおおおおwwwwww ならなんのためにnamespaceって技術が生まれたんだ?wwwwwww
929 :
923 :2010/03/15(月) 14:51:01 ID:R2wjg7Ee
>>924 ありがとうございます。
nkfのほうがよさそうなんでそちらでやってみます。
技術てw
ライブラリの用途として作られてるクラスの名前がぶつからないようにするのは基本中の基本だろ
どっちの味方というわけではないんだが、 名前がぶつからないようにするのが基本って考えも相当危ういかと いざぶつかったらどうしようもない。って意味だし
C++とかでは、ネームスペースはライブラリ公開URLから生成し…みたいな約束があるんだが PHPごときでそこまで気にしたライブラリ作ってる人間いないだろ ぶつかる時はぶつかるよ
もともとPHPにネームスペースの機能がなかったから ライブラリの命名は被らないように注意するのが基本だと思うよ ネームスペースにしたってJavaのパッケージ名のようにしない限りは被る確立は同じに思えるし ただネームスペースの場合は、1箇所修正するだけで済むっていうメリットはあるけどね
936 :
nobodyさん :2010/03/15(月) 17:21:58 ID:EtpL+ybW
クラスの使い方ってこんな感じで使ってもOKですか? class Takahashi_Lib { function textedit() { return 1; } function foodmenu() { return "FoodSet"; } } $class = new Takahashi_Lib(); echo $class->foodmenu; }
その固定値まみれのクラスで何をしたいんだ・・・ 変数にするな。インスタンス生成するな
class Takahashi_Lib{ const textedit = 1; const foodmenu = "FoodSet"; } echo Takahashi_Lib::foodmenu; これが正解
定数名は大文字にしようぜ
使っても良いかということなら、良い。
942 :
nobodyさん :2010/03/15(月) 19:02:16 ID:e8CcSYKq
ちょっと新しい書き方で悩んでおります。 前半のif文でtrueの場合のみ、 div class="actions" の内容を表示するという処理をしたいです。 どのように書けば上手くいくでしょうか? <?php if ($userinfo['User']['role'] == 3); ?> <div class="actions"> <ul> <li><?php echo $html->link(__('Add Book', true), array('action' => 'add')); ?></li> </ul> </div>
<?php if ($userinfo['User']['role'] == 3) { ?> <?php } ?>
944 :
nobodyさん :2010/03/15(月) 19:30:32 ID:e8CcSYKq
>>943 ありがとうございます!
バッチリ綺麗に動きました!
>>939 Takahashi_Lib::foodmenuの書き方って
Takahashi_Lib->foodmenuみたいにアロー演算子と同じ?
全然違う ・・・IDは?
947 :
nobodyさん :2010/03/15(月) 20:06:06 ID:QBlQMDaR
http://localhost/index.php?data=20100315 classの中のfunction(data_ijiru())にGET文字(20100315)を渡して処理した内容を出力したいのですがどのように書くのでしょうか?
class data
{
private function data_ijiru($data){
$data = md5() . $data;
return $data;
}
}
$obj = new data();
echo $obj->data_ijiru($_GET['data']);
アロー演算子はオブジェクトにしか使えん
>>947 privateじゃミリ エラー文くらい読もうぜ
localhostのアドレス貼っても意味ないぞ privateだからアクセスできねーんだろ これもインスタンスを生成する必要が全くねーよな… class data{ static function data_ijiru($data){ return $data = md5() . $_GET['data'];; } } echo data::data_ijiru();
それを言ったらクラスである必要が無い
かっこつけてクラスなんて使うんじゃねーよ 関数だけにしとけ
echo md5() . $_GET['data']; つまりこうなるわけだ。スッキリしたなww
サニタイズもしないのか
サニタイズ言うな
サニタイズは禁句
ここが、さにーたいじんぐですか?
複数人で作業する為、他の人と名前が被らない為にクラスを使いたいと思ってました 950様のコードの書き方を覚えて書いてみたいと思います。 ありがとうございます
こんな素人が複数人で作業とは怖すぎだな
それこそ名前空間使ってやれよw せっかくZendが苦労して入れてくれたのにw
>>959 よ、ずぶのど素人が俺の質問にレスするでない、さがれ!
962 :
nobodyさん :2010/03/16(火) 00:23:15 ID:t2aUhxNk
PHPに限ったことではないと思うのですが、 掲示板のログ(書き込み)は2ちゃんねるのように.datの形式で保存するのと MySQLのようなDBに入れて保存するののどちらがいいのでしょうか?
いいの基準は?
964 :
nobodyさん :2010/03/16(火) 00:40:31 ID:t2aUhxNk
管理しやすいとか負荷があまりないとか総合的に見ていいほうです。
個人的に作って公開してるネトゲ用のデータリストはアクセスログもDBで保存してるが、これ管理しようとすると .NET FrameWork で専用プログラム作るしかないかなーと思ってる。 めんどくさいので後回しだけど・・
なんで.NETじゃないとだめなんだよw
実はCOBOLどっとねっと
PHPの環境構築するのに2時間も掛かったわ。今日からPHP始めますんでよろしくお願いします。
・2chのようにレス件数が限られている ・2chのように専ブラが普及している ・2chのようにスレッドが膨大に存在している こういう条件ならdatでいいんじゃねーの 無数に存在するスレッドのテーブルにスレ番で検索かけるよりはいいと思うぜ
趣味で配布用のPHPプログラム作ってるけど、俺はdatにしているよ。 やっぱりDB使うと初期設定がめんどうだからね。 それに1000件程度ならそんなに処理時間もかからないし、 掲示板ならスレッド(トピックス)毎に分ければ良いだけだからね。 (まさに2ちゃんがそれだが)
SQLiteにすれば配布も楽
ハードな検索とかないならそれが一番だな
973 :
nobodyさん :2010/03/16(火) 11:10:14 ID:zjXFVPa/
ユーザーが入力した文字列をログに保存してページに出力する場合、 サニタイズ(htmlspecialcharsとか改行の置換とかいろいろ)は保存するときと出力するときと2回行うべきですか? よく出力するときだけ行えばいいってここで聞いた覚えがあるのですが、 一行一データでログに保存する場合、改行を含む文字列を保存するときに問題があるのですが 保存するときにサニタイズなどはしないほうがいいのでしょうか?
974 :
nobodyさん :2010/03/16(火) 11:11:48 ID:AXr2QtK6
wikiシステムの作り方を勉強したいのですが 例えば以下のように書いたものを<li>で囲むにはどのような作業を行うのでしょうか? *リスト1 *リスト2
>>973 htmlspecialcharsは出力の直前
保存は、DBならSQLインジェクションに注意(mysql_real_escape_stringなどでエスケープ)
ファイル保存で改行が問題になるなら改行だけ置換
>>974 $lists = array('リスト1', 'リスト2');
foreach($lists as $list)
{
echo '<li>'.$list.'</li>';
}
こんな感じ
\*.*$で要素抜いて置換じゃね
981 :
nobodyさん :2010/03/16(火) 14:33:31 ID:ThiLQofN
【OS名】 色々 【PHPのバージョン】php5.26 【連携ソフトウェア】mysql 【質問内容】 定数を定義する場所は、一般的にはどこがいいのでしょう? もちろん環境によるとは思うのですが、計測してから決めるというのはそう無いですよね? 1.実行するphpファイルにdefine 2.includeするphpファイルにdefine 3.const 4..ini、.conf等のテキストファイルに 5.データベースに 6.その他
一般的には自分の開発効率がいいところ
>>981 includeするファイルにすると第三者が見やすい
環境ごとに違う設定が必要なのはINI、 同じでいいならincludeするファイルに、 という感じで俺は使っているよ。 perl も php も ruby もそうだけど、実装 の作法ってこの言語ならこう!ってのは なかなか集約しづらいと思う。 自分なりの方法論を見つけていけば いいんじゃないのかな。
985 :
nobodyさん :2010/03/16(火) 15:11:58 ID:ThiLQofN
実装自体はそう難しくはないですが、なんとなくこうしてるとしか説明できないと、どうも嫌だな、と思いまして伺った次第です。 includeするとして、constとdefineのどちらを使っていますか? くらす::TEISUとTEISUの違いでしかないとは思いますが、constの方がどこにあるかと判断しやすいかなとは思うのですが、余計なメモリ消費やオーバーヘッドもあるんじゃないかと思ったりもするわけです
他人がこうしてるから/こう言ったからこうしてますはいいのか
987 :
986 :2010/03/16(火) 15:20:48 ID:???
そうじゃなくてこの方法ではオーバヘッドはこれくらいあってこのシステムではどれだけのオーバヘッドを 許容できるから自分はこちらを使う/使わないを選択すればいいんじゃないのか
納得できるのであれば模倣しようと思ってます 基本的にプログラミングはそうやって覚えていくものじゃないですか?
>>987 それをお聞きしたくて投降しています。
>986さんはそれについてどう考えられていますか?
990 :
nobodyさん :2010/03/16(火) 15:28:02 ID:ThiLQofN
すいません、988と989age忘れました
規約の問題じゃないのかな。 ZendのとかPEARのとかお好きなのどうぞ。
zendもpearもcakephpも難しすぎて使い方が分からないのだ!! イライラするのだ!!!!!!!!!!!!!!!!!!!
まずクラスの使い方 次はデザインパターンの勉強すれいい 複数人で開発する際に、他のPGとの意思の疎通がやりやすいという建前ではなく、 他の糞PGが作った部分を隔離することで、バグの責任の所在を明らかにすることが目的という意味でね 設計の段階で責任分担がなされていないブラックIT企業ならなおさらのこと、覚えておいて損はない
994 :
nobodyさん :2010/03/16(火) 20:59:08 ID:cUbgN6Jr
【OS名】 FreeBSD 【PHPのバージョン】php5 【連携ソフトウェア】無し 【質問内容】 includeされて読み込まれた先のhtmlのタイトル−<title>タイトルだよ</title>−を取得してくれる関数は 用意されていますか? 以前はそういう関数は無かったのでhtmlファイルに以下のような小細工をしてタイトル名を取得していました。 <html> <header> <?php>$title = "タイトルだよ";</?> <title><?php>echo $title</?></title> </header> <body> <?php>include hoge.php</?> ← hoge.phpのなかで $title を通してタイトル名を取得できるようになる。 </body> </html> 従来のこの方法ですとhtmlファイルのタイトルに小細工をいれなければならないので結構面倒でした。 最近のPHPではこのあたりは改善されたりしていますか?
php5ってなんだよ php5.0 php5.1 php5.2 php5.3で違うんだからちゃんと書け
>>994 <?php>←なにこれ?
普通はテンプレートにタイトルと本文を埋め込むけど
あえてそれをやりたいなら正規表現使えばできるよ
ついでに言うと<header>なんてタグ存在しない
なしてこういう人は書き込みフォームに一から手で記述するんだろうね
999 :
994 :2010/03/16(火) 22:02:19 ID:cUbgN6Jr
>>995 すいません。php5.3です。
>>996 > 普通はテンプレートにタイトルと本文を埋め込むけど
そのあたりをもう少し詳しく教えて頂けないでしょうか
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。