【PHP】下らねぇ質問はID出して書き込みやがれ 85
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/06/15(月) 22:53:52ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 84
http://pc11.2ch.net/test/read.cgi/php/1240835951/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0233nobodyさん
2009/06/27(土) 09:21:00ID:???システムファイルを修正する前はapacheがちゃんと起動できたのに、誰か助けて〜〜〜〜〜〜!
0234nobodyさん
2009/06/27(土) 11:46:01ID:???GoogleのHTMLを取得して、別に用意したlog.htmlに上書き
という処理をしたいです。
<?php
$lines = file("http://www.google.co.jp/index.html");
foreach ($lines as $l) {
$html .= $l;
}
$inc = fopen("log.html","w");
fwrite($inc,$html);
fclose($inc);
?>
上記コマンドで文法ミスがありますでしょうか?
別問題としてcronを使っているので、cron側の問題でしょうか?
0235nobodyさん
2009/06/27(土) 12:25:28ID:???0236nobodyさん
2009/06/27(土) 12:33:20ID:+txMHXQ40237nobodyさん
2009/06/27(土) 12:59:40ID:???0238nobodyさん
2009/06/27(土) 16:34:23ID:nkgcVTu2データベースから取り出した文字列を、textやtextAreaの形でブラウザに表示をさせ、
もし変更があれば、変更を入力してもらい、変更があった場合と変更がない場合で
処理をかえるプログラムを作っています。
ここでphpの文字列比較がうまく行かなくって悩んでいます。
データベースから取り出した文字列をセッションで保存(この文字列を以下「A」とします。)
それをブラウザで表示させ、再度入力をしてもらった文字列(以下「a」とします。)
「a」はもちろん入力された後、すぐにhtmlspecialcharsを通しています。
if(strcmp(A,a)==0){
//処理1
} else {
//処理2
}
とすると、何の変更もないのに処理2を行ってしまいます。
なにかうまい方法はないでしょうか?
「A」をhtmlspecialcharsで変換してみてもだめでした。
どなたかご存知でしたらお教えください。
よろしくお願いいたします。
0239nobodyさん
2009/06/27(土) 17:33:06ID:???表示しないでしょ?
0240nobodyさん
2009/06/27(土) 19:26:15ID:???脊髄反射してみる
0241nobodyさん
2009/06/27(土) 20:56:19ID:nkgcVTu2一応確認のために、入力してくれた値を再表示するので、通してます。
>>240
見比べても、全く違いがないんだけど・・・・
0242nobodyさん
2009/06/27(土) 21:27:39ID:???0243nobodyさん
2009/06/27(土) 21:39:09ID:nkgcVTu2とりあえず、試しにhtmlspecialcharsをかけないで試してみた。
でも、変わらず・・・。
ただ、htmlspecialcharsをかけてもかけなくても、文章によっては正常に「同じ」と評価する場合もある。
なんか、だめな文字とかあるのかな?
0244nobodyさん
2009/06/27(土) 21:57:17ID:nkgcVTu2評価している両方の文章の見分けは、やっぱりつかない。
でも文字列にmd5をかけてみたら、違う数字になった。
やっぱりどこかが違っているみたい。
0245nobodyさん
2009/06/27(土) 22:15:58ID:???0246nobodyさん
2009/06/27(土) 22:35:53ID:nkgcVTu2macの改行文字「\r」を評価するもの同士から削除すると、再現されなくなる。
どうやら昔macで入力したデータは、文字列評価で誤作動を起こすらしい。
0247nobodyさん
2009/06/27(土) 22:45:01ID:???0248nobodyさん
2009/06/28(日) 00:03:18ID:???0249nobodyさん
2009/06/28(日) 08:31:21ID:???前にこんな風に使ってる方が居ました。
mysql_real_escape_stringを使ってさらにhtmlspecialcharsも使ってました
0250nobodyさん
2009/06/28(日) 10:06:21ID:???htmlspecialchars()は表示するときに無用なゴミを取るもの。
0251nobodyさん
2009/06/28(日) 11:38:42ID:???0252nobodyさん
2009/06/28(日) 11:44:31ID:???0253nobodyさん
2009/06/28(日) 13:20:28ID:???0254nobodyさん
2009/06/28(日) 16:04:22ID:04jk16zQ他の人から丸見えなんで、隠す方法ってありますか?
0255nobodyさん
2009/06/28(日) 16:07:45ID:???basic認証が使えないってことは.htaccessも使えないのかな?
使えるならそれで隠せるし
てかパーミッションいじればいいのでは?
0256nobodyさん
2009/06/28(日) 16:35:43ID:04jk16zQbasic認証で隠せました!
ありがとです
0257nobodyさん
2009/06/28(日) 18:07:47ID:P1lH7m+sテーブル1
a b c d e
1 0 -10 -2 1
とある場合、abcdeの値全部に
値が0より上の場合だけ
-1を足してやりたいのですが、
今まで、phpで値を参照して、0以上なら〜
という風に最低でも5回調べていました。
何かもっと効率的な方法はありますでしょうか
よろしくおねがいします
0258nobodyさん
2009/06/28(日) 18:25:56ID:???0259nobodyさん
2009/06/28(日) 18:31:00ID:P1lH7m+s全てINT型のデータです
0260nobodyさん
2009/06/28(日) 18:33:07ID:???0261nobodyさん
2009/06/28(日) 19:14:05ID:P1lH7m+s特に今のところ詳しく考えていませんが、
例えば、eの全ての値の0より上に-1を足す
ならwhere e > 0 で参照して簡単にできていたのですが(縦の値?)、
ふとこれが257の例のように、横の値(1 0 -10 -2 1)が0より上の場合だけ-1を足して
とした場合どうやればいいんだろう、と気になったのです。
で、今まで通り縦の方法をわけてやる方法しかないのかな、と質問してみました。
0262nobodyさん
2009/06/28(日) 20:24:17ID:???0263nobodyさん
2009/06/28(日) 21:55:28ID:???a = IF(a >= 0, a - 1, a),
b = IF(b >= 0, b - 1, b),
.....
つーかPHP関係ないな
0264nobodyさん
2009/06/29(月) 10:14:56ID:fNGZfwgvテストをブラウザでするにはどうすればいいでしょうか?
コマンドラインだと文字化けした時にコンソールが死んでしまうので
ブラウザでテスト結果を見たいのですが。
ネットで検索しても古いドキュメントばっかりで
3.3でやり方知っていたらお願いします。
0265nobodyさん
2009/06/29(月) 11:21:55ID:Q/RyyZ0F【PHPのバージョン】
【連携ソフトウェア】
【質問内容】
すいません、プログラムの事はよく分からないのですがエラーの内容にPHPと記述されていたのでここにきました、質問させてください
「萌えた体験談コピペ」という2chまとめ系のサイトの記事を開くと
Warning: require_once(Net/Socket.php) [function.require-once]: failed to open stream: No such file or directory in /home/www/moe/HTTP_Request-1.2.4/Request.php on line 47
Fatal error: require_once() [function.require]: Failed opening required 'Net/Socket.php' (include_path='.:/usr/share/php:/usr/share/pear') in /home/www/moe/HTTP_Request-1.2.4/Request.php on line 47
このような文が出てサイトが開けません、時間を空けたり再起動したりしましたがまったく変わりませんでした
最近ネット関係でいじった事といえばFireFoxをインストールした位です、ちなみにFireFoxでもIEでも同じ症状がでます
どうすればようでしょう、よろしくお願いします
0266nobodyさん
2009/06/29(月) 11:24:22ID:???| htmlspecialcharsはDBに入れる前でなく表示する直前にかけれ
というサニタイズするな意見がよくあるけど、
表示する前の htmlspecialchars を忘れるセキュリティホールを本当によく見る。
人間だから 100% は無理だからね。
なのでサニタイズしたほうがバグになっても
セキュリティホールにはならないと思うのだけどどう?
0268nobodyさん
2009/06/29(月) 13:36:35ID:fNGZfwgv出力の時、全てサニタイズするようにして、HTML出力したいところだけ
明示的にOFFにするようにすればOKだと思います。
それでも100%じゃないというなら、DBに入れる前にサニタイズだって100%とは言い切れないと反論させてもらいます。
0269266
2009/06/29(月) 13:56:17ID:???そういうことです。>出力の時、全てサニタイズ
「表示する直前」の定義によるのですが、
まさに表示する直前に
print htmlspecialchars($var, ENT_QUOTES);
は危険だなと。
0270nobodyさん
2009/06/29(月) 14:12:35ID:???ハッシュ ( 連想配列? ) 用の関数はないでしょうか。
0272nobodyさん
2009/06/29(月) 14:36:11ID:lu8+BB9Zハッシュ ( 連想配列? ) 用の関数はないでしょうか。
( >>271 指定ありがと )
0274272
2009/06/29(月) 14:45:07ID:lu8+BB9Z$hash = array(
'a' => 'x',
'b' => 'y',
'c' => array(
'm' => 'o',
'n' => 'p',
),
);
$hash = array_map('foo', $hash);
function foo($argv) {
print_r($argv);
}
a や b, c が取得できなくて。
0275nobodyさん
2009/06/29(月) 14:53:52ID:???0277nobodyさん
2009/06/29(月) 15:06:21ID:???array_map も array_walk も変わらなくないか?
array_walk_recursive を求めてるんだと思ったんだが。
0278nobodyさん
2009/06/30(火) 03:41:24ID:DIe+JQtVどういう仕組か説明お願いします
function clean ($str){
$str = strip_tags ($str);
$str = htmlspecialchars ($str, ENT_NOQUOTES);
$str = stripslashes ($str);
$str = mysql_real_escape_string($str);
return $str;
}
if(isset($_POST['submit'])){
$username = clean($_POST['username']);
$password = md5(clean($_POST['password']));
0279nobodyさん
2009/06/30(火) 08:53:18ID:???strip_tagsかけてhtmlspecialcharsかけてstripslashesかけてmysql_real_escape_stringかけて
返しているということ
0280nobodyさん
2009/06/30(火) 11:57:57ID:91azNsAMエラーメッセージを出すようにしています。
(例えば「登録できませんでした。管理者にお問い合わせ下さい」的な)
しかし、記述ミスは設計者の問題ですから、そういうメッセージを見せられても
ユーザはわからなですし、他に良い方法が無いのかと思い質問しました。
0281nobodyさん
2009/06/30(火) 12:32:00ID:???0282nobodyさん
2009/06/30(火) 14:53:51ID:Y8wbyR8h「システムの記述ミスです。申し訳ありません。」
0283nobodyさん
2009/06/30(火) 16:35:46ID:???クエリやエラーの内容にもよるけど「エラーが発生しました。もう一度お試しください。」とか書くしかないじゃん
なるべく客が納得いく表現にケースバイケースで書き換えてさ。
あとはそのエラー画面に管理者宛にエラー内容書いたメール飛ばすプログラムでも組み込んで。
ユーザに「問い合わせてね♪」なんて今時みたことない
0284nobodyさん
2009/06/30(火) 22:27:17ID:???英語だけど
0285nobodyさん
2009/07/01(水) 05:29:44ID:gkTQFvwH0286nobodyさん
2009/07/01(水) 11:26:09ID:fkYaARDwチェックボックスで選択された商品の情報をDBからPHPで取得して
その情報を商品ごとに配列にしてそのままダウンロードする処理を作成したのですが
複数選択された場合のダウンロードはできませんでした。
Javascriptを使わなければならないというところまでは
調べたのですが、どういう記述をしたらいいか分からなくて
困っています。
よろしくお願いします。
JSのスレかPHPか迷ったのですがここに書かせて頂きました。
0287nobodyさん
2009/07/01(水) 11:42:24ID:???0288nobodyさん
2009/07/01(水) 11:52:55ID:4mfkCgDjつまり、1商品データを1ファイルとして扱い、
複数選択の場合は複数のファイルをダウンロードさせたいわけ?
0290nobodyさん
2009/07/01(水) 12:23:50ID:4mfkCgDj俺もやったことがないから正確なことは言えないが、ちょっと難しい
商品それぞれにダウンロードボタンを付けるのが妥当だと思う
お役に立てなくてごめんなさい
0291nobodyさん
2009/07/01(水) 12:27:59ID:???ZIP圧縮してそれを、適当なHTTPヘッダつけて送ればいいんじゃね?
0293nobodyさん
2009/07/01(水) 16:59:02ID:/Z34wosifailed to open stream: 許可がありません
というエラーが出ます。
おそらくアクセス権限のエラーと思い、ディレクトリのパーミッションを0755にしましたが、
まだこのエラーが出てしまいます。
他に何か原因があるのでしょうか
0294nobodyさん
2009/07/01(水) 17:16:31ID:???0755ってことはウニックス系鯖だな
で、パーミッション変更はFTPで行ったと・・
つまりFTPユーザとPHP実行(ウェブ)ユーザが別であると
したがって書き込むためには、0777にすればいいんじゃないかと
0295nobodyさん
2009/07/01(水) 21:11:34ID:???あるいは、アパッチ権限で動いている?
どっち?
0296nobodyさん
2009/07/01(水) 21:24:28ID:???パーミッションを0755にしたのだから、(ftpユーザと同じ)ユーザ権限で動いていれば
0755の「7」に該当するわけで問題無い。
それで問題あるという事は、PHPはapacheの権限で動いていると思われる。
0297nobodyさん
2009/07/01(水) 21:28:57ID:???0298nobodyさん
2009/07/02(木) 10:11:16ID:???0299nobodyさん
2009/07/02(木) 10:23:04ID:???もしサーバー自前でphpをはじめて動かすとかならフォルダのパーミッションも関係あるぞ
/home以下のユーザーフォルダのパーミッション/home/*/public_html のパーミッションが700になってる可能性がある、これも755にしてやらないと動かない
そもそもhello worldが動いているのか?何はできるが何になると出来ない等、問題の切り分けをしていかないと解決しないぞ
0300nobodyさん
2009/07/02(木) 17:04:14ID:0lGL3Sc9その他のマシンではdebianのパッケージ(PHP 5.2.0-8+etch15)を入れているのですが、
ソースから入れたマシンだけ、
filter_var('test..@example.jp', FILTER_VALIDATE_EMAIL);
がfalseにならず、test..@example.jpを返す。
configureはこんな感じ。
./configure --with-apxs2=/usr/bin/apxs2
--enable-mbstring
--with-ldap
--with-imap
--without-mysql
--with-libmbfl
--with-pgsql
--with-pdo-pgsql
--with-zlib
--with-curl
--with-gd
--with-kerberos
--with-imap-ssl
php5のchangelogには仕様が変わったというような記述はないようですし、
何が原因か判る方いますか?
php.iniのどこを確認すべき、とか。
0301nobodyさん
2009/07/02(木) 17:39:03ID:???0302300
2009/07/02(木) 18:00:44ID:???自己解決。
いや、解決してないけど。
debパッケージ版のソースと見比べたら、
php_filter_validate_email内の正規表現が変わっていました。
実際に両者の正規表現で直接マッチするか試したら、
5.2.10のソース版の方だけ'test..@example.jp'がマッチすることを確認できました。
Cはよくわからないのでこれ以上追えませんでしたが。
0303nobodyさん
2009/07/02(木) 18:51:38ID:???debianパッチとか見てみた。
> + - CVE-2007-1900/MOPB-45 ext/filter Email Validation Vulnerability
これじゃね? どうもタイムスタンプとか見る限り、debianのメンテナが、
PHPの新版が出るのを待って、そこからバックポートのパッチを作る時間を
惜しんで自分で作ったパッチと、PHPの中の人が作ったパッチとが違うようだ。
危険度highのセキュリティフィックスだし、本家の更新を待たずに独自パッチ作るのは
良いと思うけど、振る舞いが本家と異なるのはダメダ
さぁDebianメンテナにケツを持ち込むんだ。
0304300
2009/07/02(木) 19:24:29ID:???サンクス。
どうも修正原因は2009-02-02のこれっぽい。
http://bugs.php.net/bug.php?id=47282
内容がちょっとおかしいですけど。
e.x.a.m.p.l.e.@example.com
や
a@com
が通るように修正されたらしい。
自分的にはdebin版(というか5.2.8以前の版?)の動作を期待していました。
> This bug has been fixed in CVS.
と、バグとして処理されているので、それが本来の振る舞いってことでしょうか。
単にFILTER_VALIDATE_EMAILが自分の期待していたものとは違ってたってことですかね...。
lenny版(5.2.6)のソースから件の正規表現を持ってきて使うことにします。
0305nobodyさん
2009/07/02(木) 19:40:17ID:???0308nobodyさん
2009/07/02(木) 20:48:04ID:???0310nobodyさん
2009/07/02(木) 23:03:27ID:FF1NZIiG毎日、午前8時に自動的にmail関数を実行する事は
可能でしょうか?
もし、不可能なら、どんな言語・技術が必要でしょうか?
0312nobodyさん
2009/07/03(金) 00:05:48ID:???0313nobodyさん
2009/07/03(金) 01:42:59ID:O2VxaChrglobal $config;
}
とすると関数外の変数をグローバル変数にして取得することが出来ます。
では、classの場合はどう書けばいいのでしょうか?
0314nobodyさん
2009/07/03(金) 01:47:49ID:DH30LmcYなんとか出来そうです
@メールを送信する度に送信日付をdat書き込み
↓
Aアクセス毎に送信日付と現在の日付を比較
↓
B一致しなければメール送信
↓
@へ戻る
0316nobodyさん
2009/07/03(金) 02:08:04ID:O2VxaChrクラスの関数内でglobalを宣言すればいけます。
ただ、それだとクラスの意味はないと思い質問しました。
メンバ変数をグローバル変数にするような事が出来ればいいのですが・・。
0317313
2009/07/03(金) 02:12:24ID:O2VxaChrclass class1{
function class1{
global $config;
$this->config = $config;
}
}
0318nobodyさん
2009/07/03(金) 04:35:44ID:???0319nobodyさん
2009/07/03(金) 06:44:13ID:???普通に受け渡しすりゃいいのに
0320nobodyさん
2009/07/03(金) 09:17:30ID:0BOHJIMnこれってGESTパラメータを受けてXMLを返せばOKってことよね?
0321nobodyさん
2009/07/03(金) 09:18:49ID:0BOHJIMn0322313
2009/07/03(金) 14:10:56ID:O2VxaChrですよねw
>>319
$configはサイト設定に値する配列なのですが、
普通に受け渡しをすると、毎回、$obj->config = $config
のような指定を書かなければいけないし、クラス内の関数じゃなくて
普通のユーザ関数内で使いたいときもあります。
その時にグローバル変数化しておくとどのページでも参照できて便利なんです。
なので、もう一つ上の書き方・効率の良いソースはないかと思い、質問しました。
0323nobodyさん
2009/07/03(金) 15:04:35ID:???http://framework.zend.com/manual/ja/zend.config.html
0325nobodyさん
2009/07/03(金) 23:54:14ID:???static変数はほぼグローバル変数と同じ感じで使える。
http://jp2.php.net/manual/ja/language.oop5.static.php
class Config{
static $hoge;
}
Config::$hoge = 'hogee';
echo Config::$hoge;
0327nobodyさん
2009/07/04(土) 01:11:23ID:LBMY5xnE同じページの最初にジャンプって
出来ますか?
headerは何も書いてないときしか
使えないんですよね?
0328nobodyさん
2009/07/04(土) 01:25:38ID:???0329nobodyさん
2009/07/04(土) 04:06:05ID:???出しちゃったらあとはできちゃったのを待つしかないように・・
ページの途中で、<img onload="やりなおし関数"> を仕込むとかw
チラっとページが見れたと思ったらまたリロード。img の中身はエロ画像な。
0330nobodyさん
2009/07/04(土) 06:51:21ID:???リロードさせたいって意味?
0331nobodyさん
2009/07/04(土) 09:07:22ID:tI0ECBzn0332nobodyさん
2009/07/04(土) 09:14:08ID:???最終出力する関数をつくって、その中で最終的なヘッダを操作するようにすればいい
関数名はコンドームで
■ このスレッドは過去ログ倉庫に格納されています