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

【PHP】下らねぇ質問はID出して書き込みやがれ 77

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん2008/12/08(月) 01:27:39ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 76
http://pc11.2ch.net/test/read.cgi/php/1226517332/

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0809nobodyさん2008/12/22(月) 15:28:06ID:???
>>805
>>808

>>1スレタイ嫁
0810nobodyさん2008/12/22(月) 15:29:24ID:AQe0W6WJ
すいません、表示してませんでした
ちなみにxpのsp3です
0811nobodyさん2008/12/22(月) 15:29:52ID:???
Apacheのエラーログを読め。
原因究明に必要な事はすべてそこに書いてある。
0812nobodyさん2008/12/22(月) 15:29:56ID:???
どうせphp5ts.dllとかその周りのdllを入れ替えてないんだろw
0813nobodyさん2008/12/22(月) 15:30:15ID:???
xamppにすれば?
0814nobodyさん2008/12/22(月) 15:42:16ID:???
>>812
入れ替えるとはどういうことですか?
0815nobodyさん2008/12/22(月) 15:59:34ID:???
2.2だったら2.2用のDLLじゃないとだめじゃん
0816nobodyさん2008/12/22(月) 16:12:54ID:???
>>814
D&Dで上書きする
0817nobodyさん2008/12/22(月) 16:24:37ID:???
>>775
自動化してアカウント取るなら別に他人のクッキー読むとか関係なくね?
0818nobodyさん2008/12/22(月) 16:46:37ID:???
>>789
接続に失敗したら PDOException を投げるのでそれを掴まえる
ちなみに件のエラーは「オブジェクトを文字列に変換できねぇよバーヤ」って事

http://www.php.net/manual/ja/pdo.construct.php
> try {
>     $dbh = new PDO($dsn, $user, $password);
> } catch (PDOException $e) {
>     echo 'Connection failed: ' . $e->getMessage();
> }
0819nobodyさん2008/12/22(月) 16:58:04ID:???
>>818
普通にifのほうが初心者向きなんじゃ・・
0820nobodyさん2008/12/22(月) 16:59:44ID:???
PDOを使って、UTF8で開発しているのですが、結果が文字化けしています。

・MySQLのテーブル等の文字セットは utf8_general_ci
・phpMyAdminを通して見ると化けていない
・mbstring系の設定は
mbstring.http_input:auto
mbstring.http_output:pass
mbstring.internal_encoding:UTF-8
mbstring.language:Japanese

スクリプト側から SET NAMES 系を発行するのはよくないと聞いています。
では何を使って解決すればいいのでしょうか。
よろしくお願いします。
0821nobodyさん2008/12/22(月) 17:09:03ID:Cwv0g3tM
>>820
skip-character-set-client-handshake
0822nobodyさん2008/12/22(月) 17:10:31ID:Cwv0g3tM
default-character-set = utf8
0823nobodyさん2008/12/22(月) 17:21:45ID:???
>>820
こんどからしっかり>>1をよくよんでIDを出すことをおすすめする
08248202008/12/22(月) 17:41:45ID:mD1ma74F
>>823
出し忘れてました。すみません。
>>821-822
ローカルではその方法で可能なのですが、本番のサーバーはレンタルなので、権限がないのです。
query メソッドで SET NAMES 系を発行する場合はやはり、プリペアドステートメントを使わないと問題ありますか?
データ検索のアプリケーションのため、SQLの条件節がリクエストされてからでないと確定せず、使いにくそうなのですが。
0825nobodyさん2008/12/22(月) 17:46:42ID:???
php.iniを書き換える権限が無いってこと?
0826nobodyさん2008/12/22(月) 17:47:27ID:???
my.cnfだっけ?
08278202008/12/22(月) 17:48:25ID:mD1ma74F
>>825-826
はい。
my.cnf は通常のレンタルサーバーでは書き換えできないですよね。
0828nobodyさん2008/12/22(月) 17:49:44ID:???
mysql_set_charsetを使う
0829nobodyさん2008/12/22(月) 17:52:00ID:???
前、mysql_set_charsetで指定しても効果なかった経験あるけど今はそれで設定できるの?
08308202008/12/22(月) 17:54:35ID:mD1ma74F
>>828
調べてみたのですが、どうも、mysql_connect();でオープンする必要があるみたいです。
PDOを捨てる or query()を使わずにプリペアドステートメントを使うか、の二択でしょうかね。
08318202008/12/22(月) 18:05:57ID:mD1ma74F
どうにも解決策が見つからないので、とりあえず頭のほうで $pdo->query("SET NAMES UTF8"); で設定しておいて、
以降のクエリの発行はすべて、プレペアドステートメントを使ってどうにかすることにします。

答えてくださった方、ありがとうございました。
0832nobodyさん2008/12/22(月) 18:14:09ID:AQe0W6WJ
>>811>>812

解決しました、ありがとうございました
0833nobodyさん2008/12/22(月) 18:29:33ID:???
>>831
それ意味なくね?
>>832
どう解決したか
08348202008/12/22(月) 18:38:27ID:mD1ma74F
>>833
SET NAMES 使っちゃうと、もしかしてプレペアドステートメントも使えませんか?
そうなると、mysql_set_charsetを使うためにmysql_* で自作クラスを組むしかないのでしょうか。
0835nobodyさん2008/12/22(月) 18:38:48ID:???
>>833

>>812の人の言うとおりでした orz
お騒がせしてすみませんでした
0836nobodyさん2008/12/22(月) 21:21:32ID:b0EzUWOb
php5.2.6@windowsなんだけど、
mb_eregにおける全角スラッシュの扱いがおかしい気がする。これバグ?
具体的には
mb_ereg('<a>(.+?)</a>(.+)','<a>abc</a>xyz',$reg);
は期待した値が$regに格納されてるけど、
mb_ereg('<a>(.+?)</a>(.+)','<a>abc</a>xyz',$reg);
にしたらダメ。どーなのこれ。
0837nobodyさん2008/12/22(月) 21:24:27ID:???
>836
ereg関数はマルチバイトに対応していない。
つうか、pregが完璧に上位互換だからpreg使え。eregはPHP6で標準関数から削除される(PECLへ格下げ)。
0838nobodyさん2008/12/22(月) 21:25:07ID:???
ってmb_eregか、ロクに読んでなかった
08398362008/12/22(月) 21:27:41ID:b0EzUWOb
そうそう。個人的にはpregの方が好きなんだけどね。マルチバイト使う時はしょうがなくmb_ereg。
ローカルルールがよく分からんけど、まだage続けたほうがいいのかな?
そちらでは正常に動きますかい?
0840nobodyさん2008/12/22(月) 21:28:49ID:???
この板には基地外しかいないから、ルールとか気にしたら負けだよ。
08418362008/12/22(月) 21:32:29ID:???
連投ごめん。
PHP5.2.6@CentOS5.2で全く同じソース↓を動かしたらまともに動きやがった。
windowsだとtrue1,false2がしゅつりょくされて、centOSだとtrue1,true2が表示される。ナニコレ

if(mb_ereg('<a>(.+?)</a>(.+)','<a>abc</a>xyz'))
echo "true1\n";
else
echo "false1\n";
if(mb_ereg('<a>(.+?)</a>(.+)','<a>abc</a>xyz'))
echo "true2\n";
else
echo "false2\n";

php-windowsのバグか?

>>840
そうかwww
08428202008/12/22(月) 21:40:42ID:???
しつこくてすみません。
いろいろ調べました。
結果、PDOには文字セットの変更は伝わらない、伝える手段がないようです。
(SET NAMES しちゃダメってこと……だと思う)。
おとなしく、mysql_* なり mysqli 系にします。

お騒がせしました。
0843nobodyさん2008/12/22(月) 21:42:41ID:UijRZ2Ey
すみません
初心者です。10日ほど前に圧縮ファイルをダウンロードさせる方法について聞いた者です。
http://www.phppro.jp/phpmanual/php/ref.zip.html
このページにあるZIPファイル関数というので、
ローカルでは完ぺきにできました。
が、サーバーでは動きません(php4)

エラーは
Parse error: syntax error, unexpected ')', expecting '(' in /〜〜〜〜.php on line 135

135行目は
if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {

これは、php4では動かないと理解したらいいのでしょうか?

php4でやる場合、フォルダを圧縮するのと、透過的書込みというのを
やる方法はあるのでしょうか?

あるいは、サーバーをphp5のところに引っ越したほうがいいのでしょうか?
0844nobodyさん2008/12/22(月) 21:54:52ID:???
予期せぬ)って書いてあるじゃん
そこのカッコの数があってたら、前の部分でカッコの数があってない
0845nobodyさん2008/12/22(月) 22:12:22ID:UijRZ2Ey
レスありがとうございます。
ローカルでは動いているので、カッコは合っていると思うのですが。
それなのにエラーが出るのは、
php4ではダメという意味かなと推測しましたが、勘違いでしょうか?
0846nobodyさん2008/12/22(月) 22:17:40ID:???
予期せぬ)って書いてあるじゃん
そこのカッコの数があってたら、前の部分でカッコの数があってない
0847nobodyさん2008/12/22(月) 22:18:49ID:???
>>845
勘違いも何も、まったく関係ないエラーメッセージが出てるのに「PHP4ではダメなのかな」っていう発想がずれてる。
出るとしたら Undefined function 〜 とかだよ。
0848nobodyさん2008/12/22(月) 22:27:31ID:UijRZ2Ey
すみません
135行目の数行前に
$zip = new ZipArchive();
これがありますが、これが悪いのでしょうか?
0849nobodyさん2008/12/22(月) 22:28:42ID:???
このスレにエスパーはいないので、スクリプトを全うpすればいいと思うよ。
0850nobodyさん2008/12/22(月) 22:29:52ID:???
とりあえず、zipが使えるのかphpinfoで確認したら?
0851nobodyさん2008/12/22(月) 22:32:53ID:UijRZ2Ey
すみません。
その前に、圧縮ファイルの中に書き込むデータを記述するところがあって、
そこが悪いことがわかりました。
$data = <<<MESSAGE
なんたらHTML
MESSAGE

この表記に何か問題あるでしょうか?


0852nobodyさん2008/12/22(月) 22:34:32ID:???
>>851
>>849
0853nobodyさん2008/12/22(月) 22:36:40ID:UijRZ2Ey
たびたびすみません
$data = <<<MESSAGE
なんたらHTML
MESSAGE

の中に、変数を入れているのが悪いのではと推測しますが、
HTMLのなかに変数を入れる場合、変数を""で囲むのでしょうか?
初心者ですみません
Perlでは囲まないような気が
0854nobodyさん2008/12/22(月) 22:38:16ID:???
>>853
>>849
0855nobodyさん2008/12/22(月) 22:40:02ID:???
エラーメッセージ読んでる?

Parse error: syntax error, unexpected ')', expecting '(' in /〜〜〜〜.php on line 135
'('があるべき場所に予期せぬ')'があります。
0856nobodyさん2008/12/22(月) 22:43:47ID:???
MESSAGE; 最後はこうだろ
0857nobodyさん2008/12/22(月) 22:49:54ID:???
>>855
なにそのエキサイト翻訳みたなの
0858nobodyさん2008/12/22(月) 22:53:14ID:UijRZ2Ey
レスありがとうございます。
MESSAGE; にしていました。

MESSAGEの中に、

<?php
header("content-Type: text/html; charset=sjis");なんたら
?>

これがあるのが悪いみたいです。
これ(<php? ?>)は、どうやって入れたらいいのでしょうか?
外部のテキストデータを読む?
0859nobodyさん2008/12/22(月) 22:54:27ID:???
そのレベルで、スクリプト動的生成とかどうみても危険すぎて笑えるw

0860nobodyさん2008/12/22(月) 22:56:54ID:???
x-sjisかshift_jisじゃない?
0861nobodyさん2008/12/22(月) 22:58:52ID:???
>>860
それ今はどうでもよくね。
0862nobodyさん2008/12/22(月) 23:07:56ID:UijRZ2Ey
原因はこれしかないです。

<?php
header("content-Type: text/html; charset=sjis");
?>

sjis を変えてもダメで、
header("content-Type: text/html; charset=sjis");
のheaderがダメみたいですね。うーん
0863nobodyさん2008/12/22(月) 23:10:14ID:???
>>862
君には才能がないから他の道を行くといい。
0864nobodyさん2008/12/22(月) 23:19:27ID:UijRZ2Ey
"をエスケープしたらいいような気がしましたが。
これでいいでしょうか?
0865nobodyさん2008/12/22(月) 23:22:40ID:???
そんな調子じゃソースさらさない限り前に進まないと思うぞ
そのつもり無いならとっとと失せろ
0866nobodyさん2008/12/22(月) 23:32:40ID:???
人の話を聞かない奴多すぎw
0867nobodyさん2008/12/22(月) 23:35:36ID:???
つまり、こうなってんの?

$data = <<<MESSAGE
<?php
header("content-Type: text/html; charset=sjis");
?>
hogehoge
<b>hogehoge</b>
MESSAGE;
0868nobodyさん2008/12/22(月) 23:36:55ID:F+ur7gRG
久しぶりに来たけどなんでこんなに乱立してるんだ
0869nobodyさん2008/12/22(月) 23:38:53ID:UijRZ2Ey
>>867
そうです。

皆様
いろいろお騒がせしてすみませんでした。
ZIP関数の例文をコピーしてアップしてみたら、
やはり同じところで同じエラーが出るので、
これは、zip関数が使えないということだと思います。

その場合、どうしたらいいのでしょうか。
PEARでできるでしょうか(フォルダ圧縮、透過的書込み)
0870ただの人2008/12/22(月) 23:39:08ID:i5NpGqPt
PHP暦1ヶ月ぐらいです。
最近、PEARを知ったのですがログイン認証機能を設置するのに
Authを使おうか迷っています。

Auth使った失敗談とか教えてくれたらうれしいのですが・・・
0871nobodyさん2008/12/22(月) 23:39:15ID:???
なんだあのコード
あんなの動くのか
0872nobodyさん2008/12/22(月) 23:39:37ID:???
人の話聞かない質問者のひとは egachan か?
うざいから、どっか消えろよw
0873nobodyさん2008/12/22(月) 23:40:50ID:???
>>869
環境は違うが。
<?php
$data = <<<MESSAGE
<?php
header("content-Type: text/html; charset=sjis");
?>
hogehoge
<b>hogehoge</b>
MESSAGE;
echo $data;
?>

エラーなし、hogehoge って出たぞ。
出るエラーメッセージは何よ?
0874nobodyさん2008/12/22(月) 23:49:50ID:i5NpGqPt
\(´・ω・`)\ チョキーン
0875nobodyさん2008/12/22(月) 23:51:32ID:???
もしかして$dataにheaderが入るとか信じてる?
0876nobodyさん2008/12/22(月) 23:51:35ID:???
もちろんZipモジュールインストールしたんだよな?・・・な?
リンク先にちゃんと書いてあるし
08778362008/12/22(月) 23:51:52ID:???
流れぶった切って悪いが、>>836はどんなかんじ?
SJISの関係かしら。
0878nobodyさん2008/12/23(火) 00:00:12ID:59V79J7s
皆様すみません
自鯖ではないので、インストールできません。
やはり、原因はZip関数が使えないのだと思います。
ローカルでは動いていますので。

そういう場合、どうすればいいのでしょうか?
0879nobodyさん2008/12/23(火) 00:02:20ID:???
首釣って氏ぬ
0880nobodyさん2008/12/23(火) 00:08:41ID:???
他人の話を聞かない典型だな
0881nobodyさん2008/12/23(火) 00:11:18ID:???
この板は、基地外と話聞かないアホしか来ないのかw
0882nobodyさん2008/12/23(火) 00:18:06ID:???
釣りだとしたらつまんないし
本気だとしたら本人の頭が改善できないから無理だな。
0883nobodyさん2008/12/23(火) 00:41:06ID:???
よくわからないまま勝手に解決したあとで、釣りでした宣言来そうだなw
0884nobodyさん2008/12/23(火) 01:33:38ID:59V79J7s
すみません、圧縮の件、初心者です。
検索すると、PECLというのは、PEARとちがって
コンパイルする必要があると書いてあります。
それって、自分でレン鯖に入れることできるのでしょうか?
0885nobodyさん2008/12/23(火) 01:42:05ID:VpMBr0l7
php 5.2.3です。

funcA( ABC , DEF );
となっている部分の
ABCとDEFをpreg_matchで取り出すのは簡単ですが、
preg_match( "/.*funcA\s*\(\s*(.+)\s*,\s*([^\)]+)\s*\)/", $xxx, $yyy ) )
でできたのですが、
funcA( funcB( XYZ ) . ABC , DEF );
と入れ子になっていたりすると、
funcB( XYZ ) . ABC
DEF
が取り出せません。
さらに、
funcA( funcB( XYZ ) . ABC ,
               DEF );
などとなっていると、さらに厳しいです。
これを鮮やかに取り出す方法はないでしょうか?
よろしくお願いします。
0886nobodyさん2008/12/23(火) 01:44:29ID:???
>>885
pukiwiki のソースでも読んでろ
0887nobodyさん2008/12/23(火) 02:00:17ID:???
本気でやるなら、適当なlexerなりHTMLとかのパーサーなりの実装例を読むのが近道かもな。
正規表現一発では無理、仮に出来たとしてもかえって難しい。
状態を持つ再帰構造で頑張るか、ツリー型のデータ構造(Interpretorパターン)を自前で実装する必要がある。
0888nobodyさん2008/12/23(火) 02:14:55ID:???
日常五心

「有難う」と言う
 感謝の心


「すみません」と言う
 反省の心


「おかげ様」と言う
 謙虚な心


「私がします」と言う
 奉仕の心


「はい」と言う
 素直な心
0889nobodyさん2008/12/23(火) 02:29:36ID:6F++HAzm
質問です。
md5を使って二重投稿の判定をしようと考えています。
本文が64KBなのですが、
md5($str) で、$strに最大64KBもある文字列を突っこんでも一意の値を返してくれるのでしょうか?

DBより前回の投稿本文を取ってくる = $str1 (最大64KB)
今回の投稿本文 = $str2 (最大64KB)

if(md5($str1) == md5($str2)) {
※同じ値なので二重投稿として判定
}

この方法はあってますでしょうか?
0890nobodyさん2008/12/23(火) 02:40:56ID:???
何十メガのデータでも、すでに公表されてる例以外には、あんまり衝突することないと思うよ。
0891nobodyさん2008/12/23(火) 04:16:18ID:???
md5変換のオーバヘッドの方が文字列の直接比較より大きくないか?
0892nobodyさん2008/12/23(火) 04:16:43ID:???
>>889
MD5 に限らずハッシュ関数ってのは特徴を求めるための関数
一意性を求めるための物じゃないので衝突は絶対に発生する
データベースにデータとそのハッシュ値を保存しておいて、
最初にハッシュ値でざっと比較し、その後精査てな感じで利用される

ちなみに書いてくれた方法だとハッシュ値なんて得ずにそのまま比較するだけでいい
08938892008/12/23(火) 04:27:42ID:6F++HAzm
>>890-892
ありがとうございます。
教えどおり直接比較してみることにします。

ちなみに画像データは
hash_fileで比較しようとしてたのですが、これも直接比較する方法があるのでしょうか?
0894nobodyさん2008/12/23(火) 04:51:43ID:???
バイナリで比較すりゃいいじゃん
0895nobodyさん2008/12/23(火) 05:08:34ID:KPRHaWl+
http://phpc2.seesaa.net/article/50643791.html

ここのページのサンプルの、

<?php

class Food {

private $name;

public getName() {
return $this->name;
}

}


これを実行したらエラーになるんだけど、なんで?
0896nobodyさん2008/12/23(火) 05:13:31ID:???
もう一個下の例なら
0897nobodyさん2008/12/23(火) 05:18:16ID:???
4だからだろ
0898nobodyさん2008/12/23(火) 05:24:10ID:???
>>893
string 型はバイナリセーフなので比較演算子 == が使える
二つのファイルを fread() 等で読み込んで比較するだけ

I/O に掛かる時間は馬鹿にならないから直接比較する機会は減すよう、
それこそハッシュ値やメタ情報(ファイルサイズetc)を活用するといい
0899nobodyさん2008/12/23(火) 05:58:11ID:???
PHPのオブジェクト指向の一番カンタンな例

<?php
class aaa
{
var $bbb="はじめまして";

}
$ccc = new aaa();

echo $ccc->bbb;
?>
0900nobodyさん2008/12/23(火) 06:00:49ID:???
var って必ず無いとダメなのかなぁ?と思って、

<?php
class aaa
{
$bbb="はじめまして";

}
$ccc = new aaa();

echo $ccc->bbb;
?>

って、「var」を削って保存して実行してみた。
結果、問題なく表示される。varいらないジャン?
0901nobodyさん2008/12/23(火) 06:01:46ID:???
それは良かったね
0902nobodyさん2008/12/23(火) 06:02:21ID:???
ごめんvarが無いとエラーになった
まちがえてたごめん
0903nobodyさん2008/12/23(火) 10:51:31ID:gaPLrdeb
CackePHP使ってる人っているんですか?
0904nobodyさん2008/12/23(火) 11:24:31ID:???
>>903
いなきゃ開発なんてされないだろ
0905nobodyさん2008/12/23(火) 11:35:35ID:???
varなんてどうせ使わないから問題ない。
全部privateが基本だからな。
0906nobodyさん2008/12/23(火) 11:37:26ID:???
まだPHP4も現役だぜ?
0907nobodyさん2008/12/23(火) 11:43:13ID:gaPLrdeb
個人サイトで使ってる人って少ないですよね
0908nobodyさん2008/12/23(火) 11:46:09ID:???
4も5も通用するvarを使う以外にありえん
レス数が900を超えています。1000を超えると表示できなくなるよ。