【PHP】下らねぇ質問はここに書き込みやがれ 60
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/12/01(土) 21:18:36ID:MnWwNIk0PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 58
http://pc11.2ch.net/test/read.cgi/php/1195204145/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0173nobodyさん
2007/12/05(水) 18:23:01ID:???サイズ0にするような関数ありますか?
いまいち調べてもこれというのがでてきません。
宜しくお願いします。
0174nobodyさん
2007/12/05(水) 18:30:55ID:???0175nobodyさん
2007/12/05(水) 18:36:18ID:pQhoHUATPHPのマニュアルのサイトにはクラスを使用するときは
$hoge = new MDB2();
のようにした書き方をしているのですが
MDB2などの中身を勉強の参考にのぞいてみると
$hoge =& MDB2::connect($dsn);
といった書き方をしていました
この二つはいったい何が違うのでしょうか?
MDB2::connect($dsn);の方はコンストラクタを実行せずにnew
していると考えて良いのでしょうか?
0176nobodyさん
2007/12/05(水) 18:51:05ID:???もしもファイルサイズが**以上なら、ファイルを開いて空にする。
そうでなければなにもしない。
これでできますけど何か?
0179nobodyさん
2007/12/05(水) 19:30:39ID:???php_flag session.cookie_lifetime 250
じゃ、変えられなかった。
ini_set 使うべきなのか。。
0180173
2007/12/05(水) 19:34:11ID:???$file = 'aaaa.txt';
if (filesize($file) > 10000) {
unlink($file);
}
こんな感じでどうでしょうか?
0182nobodyさん
2007/12/05(水) 19:54:41ID:???$filename = $_GET['u'];
$array = file($filename);
$filenaiyou = join("",$array);
echo $filenaiyou;
?>
これのセキュリティ上の対策を教えてください
0184nobodyさん
2007/12/05(水) 20:02:12ID:???0185nobodyさん
2007/12/05(水) 20:02:26ID:???ありがとうございます。
確かにファイルが削除されます。^^;
ただ、次に fopen() で モードを a にすれば削除された
ファイルがまた空でよみがえりますよね?
0186nobodyさん
2007/12/05(水) 20:06:28ID:DG3jNG37<?php
$filename = $_GET['u'];
$array = file($filename);
$filenaiyou = join("",$array);
echo $filenaiyou;
?>
これのセキュリティ上の対策を教えてください
0188nobodyさん
2007/12/05(水) 20:21:58ID:???モード w でも蘇るが。
そうやるなら、wで開いてfputsで 空白を書き込めばいい。
0になるかはわからないけど、とりあえずマシーロになる。
0190nobodyさん
2007/12/05(水) 20:33:16ID:DG3jNG37危ないのはわかるのですが、
どう対策したらいいのやら。
やってみた事
1.先頭のhttpを1度切り離し再度付ける。
2.htmlspecialchars
3.".."はエラー
4.このスクリプトの名称はエラー
このぐらいしか思いつかなくて。。
ここにいらっしゃる方々なら、今ある脆弱性の対策を
しっかりされてるだろうと思い投稿しました
0192nobodyさん
2007/12/05(水) 21:02:50ID:???0193nobodyさん
2007/12/05(水) 21:16:41ID:???そうですね。
ただ、某フレームワークを使ってる
他サイトさんを見ると、
結構抜け目があったりしてます。
まぁ言い出したらキリがないですね。
ありがとうございました。
0194nobodyさん
2007/12/05(水) 21:17:00ID:???基本的に.htaccessで設定できないものは
ini_setでは設定できないと思っておいた方がいい
そして値をセットする時は
php_flagじゃなくてphp_value
0195nobodyさん
2007/12/05(水) 21:20:09ID:???べりーさんきゅー。
ありがとう、覚えておくよ。
On Off で指定するときは php_flag、値を指定するときは php_valueっていう解釈でいいのかな?
0196nobodyさん
2007/12/05(水) 21:32:48ID:QkDOhUsvセーフモードがoffの状態でも動くものでしょうか?
0198nobodyさん
2007/12/05(水) 22:01:40ID:wraGx0x2そのうち一度だけ、その関数の引数を使った条件が真のとき(for文中のif文でチェック)、
その数字を赤字で出力する場合(<font color=red>$i</font>)、
以降の処理ではif文をもう実行しないという方法はないでしょうか?
ただし、現在ある赤字チェック以外のif文を新規に追加しないことと、
数値の出力自体は100まで実行するものとします …やっぱり無理かな?
0199nobodyさん
2007/12/05(水) 22:05:25ID:???0200nobodyさん
2007/12/05(水) 22:22:37ID:???for($i = 0;$i < 100;$i++) {
if ($flag == false && hoge($i)) {
echo '<font color="red">'.$i.'</font>';
$flag = true;
}
echo $i';
}
function hoge($hoge) {
if ($hoge == true) {
return true;
}
return false;
}
こんな感じか?
標準関数ではそんなのない
0201nobodyさん
2007/12/05(水) 22:30:08ID:h+ynIQ9APerlみたいにコマンドを入力する黒い画面上での実行は無理ですか。
0202nobodyさん
2007/12/05(水) 22:35:02ID:???0203nobodyさん
2007/12/05(水) 22:39:13ID:???残りのループの中で無駄なifをやりたく無いって事だろうけど、後で読み辛くなると思うなぁ。
for($i=0; $i<100; $i++){
if(cond($i)){ do_1; break; }
}
for(;$i<100;$i++){ do_2; }
0204nobodyさん
2007/12/05(水) 22:41:41ID:???PHPの本3冊共、黒画面の実行プログラムが載ってないからな。
0205nobodyさん
2007/12/05(水) 22:42:07ID:???どうもです
>標準関数ではそんなのない
聞いて安心しました 赤字を返す処理してるのにそのあとまでif文実行するなんて
無駄だなーって思ってたんですが、自分が知らないのかと不安で、、 ありがとう
0207nobodyさん
2007/12/05(水) 23:35:42ID:???どんだけレベルひくいねんなw
0208nobodyさん
2007/12/05(水) 23:56:31ID:???>>207とかねwwwwwwwwwwwww
0209nobodyさん
2007/12/06(木) 01:14:57ID:???0210nobodyさん
2007/12/06(木) 02:24:47ID:HrkIjuFXimagecopyresampledなどを使っても上手くできません。
どうやってやれば良いのか教えてください。
0211nobodyさん
2007/12/06(木) 02:28:43ID:???↓
以下は自分で考えてみろ
0212nobodyさん
2007/12/06(木) 02:28:54ID:???0213nobodyさん
2007/12/06(木) 04:28:51ID:5xDWI9jJHTMLの<form><textarea>タグから得られた複数行の文字列を
1行目、2行目という風に行ごとに分ける方法を教えてください。
0215nobodyさん
2007/12/06(木) 05:07:11ID:5xDWI9jJ\nとexplodeを使ったら、上手く出来ました。
ありがとうございました。。
0216nobodyさん
2007/12/06(木) 10:46:08ID:Wo2vC2Xgログイン中のユーザのセッションに保存されてる値を他のユーザから書き換えを行いたいと思います。
0218nobodyさん
2007/12/06(木) 11:17:23ID:???0219nobodyさん
2007/12/06(木) 11:37:58ID:???> Perlみたいにコマンドを入力する黒い画面上での実行は無理ですか。
ふつーにできるでしょ。CLIのやつを使えば。
C:\>php -r "echo 'hogehoge';"
hogehoge
C:\>php --version
PHP 5.2.4 (cli) (built: Aug 30 2007 07:06:31)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
C:\>
> そうなのか。
> PHPの本3冊共、黒画面の実行プログラムが載ってないからな。
何に対して「そうなのか」と言ってるんだろう
0221216
2007/12/06(木) 13:00:52ID:Wo2vC2Xg要件としてサイトAからサイトBにユーザが移動時にパラメータでポイント的な値が渡されます。
その値をサイトBにて表示してます。
サイトCにユーザが移動してなんらかのアクションを起こすとサイトCからサイトBにサーバ間通信されます。
ここでサイトBのポイントを減算する必要があります。
ユーザが戻るリンクでサイトBに戻ればよいのですが、ブラウザの戻るボタンで戻った場合を考慮して
通信を受けた際にセッションのポイントを減らすのが目的です。
ちなみに携帯向けなのでクッキーは使用できません。
DBに都度保存すれば良いのですが、面倒なのでできれば直接セッションを書き換えたほうが楽かなと思っております。
0222nobodyさん
2007/12/06(木) 13:49:14ID:???0223nobodyさん
2007/12/06(木) 14:00:06ID:k6INzxiU#PHPエラー設定
ini_set('html_errors', "1");
ini_set('error_reporting', 6135);
ini_set('display_errors' , "1");
echo :
?>
ローカル鯖ならエラーが出てくれるのに
レンタルサーバーではエラーが表示されません。
どうにかしてエラーを出すように設定ができないでしょうか?
0224nobodyさん
2007/12/06(木) 14:07:17ID:k6INzxiUFATALエラーの場合、ini_setだとスクリプト自体が実行されないから
ini_setが反映されないのかorz
他の方法探してみます・・・。
0225nobodyさん
2007/12/06(木) 14:20:04ID:k6INzxiUさくらまじで死ね!
0226nobodyさん
2007/12/06(木) 15:12:16ID:???0227nobodyさん
2007/12/06(木) 15:14:36ID:k6INzxiU0228216
2007/12/06(木) 15:36:20ID:???了解しました。
セッションを操作できる方法があればと思いましたが、
DBを使う事にします。
ありがとうございました。
0229nobodyさん
2007/12/06(木) 15:44:28ID:???初心者丸出しwwwwwww
でも、いい経験になったね。
0233nobodyさん
2007/12/06(木) 16:32:30ID:???0234nobodyさん
2007/12/06(木) 19:13:26ID:???これで$kを0〜10まで表示させたいのですが、どのような形で可能でしょうか?
0236nobodyさん
2007/12/06(木) 19:38:05ID:???0237nobodyさん
2007/12/06(木) 19:50:28ID:???for($i=0;$i<11;$i++){
print $aaa[$i];
}
とか?
もしくは面倒&パフォーマンス悪いけど
$i = 0;
foreach($aaa as $k => $v){
if($i < 11){
print $k . ' => ' . $v;
}else{
break();
}
}
0238234
2007/12/06(木) 19:53:15ID:???var_dumpで$vを調べてみたら int(数字が高い順にarsortでソートされてる)
でした。$vはポイント集計の数字のようです。
$kには人名が入ってました。
この場合で$vを上から10位までのランキングとして11位以下を足切りしたいのですが、
foreach($aaa as $k => $v) {
$v = range(0,10)
としても上手くいきません。 どこがまずいのでしょうか?
0239nobodyさん
2007/12/06(木) 19:58:08ID:???エラー吐くならエラー文載せろクズ
0240nobodyさん
2007/12/06(木) 20:00:43ID:???まったく何も表示されません。
考えてみたら$vは
int[112]
int[100]
int[99]
int[78]
int[68]
int[66] ....
こんな感じなのでrangeもくそもないですのね^^;
0243nobodyさん
2007/12/06(木) 20:50:09ID:???0244nobodyさん
2007/12/06(木) 21:28:56ID:???IIS6+PHP5.2(Win2k3 R2)
PostgreSQL(Win2k3)
WebServerとDBServerを別筐体で運用。
move_uploaded_fileを使ってフォームからアップロードされたファイルを
DBServer側に保存させたいのだが...
IIS上でDBServer上の共有ファイルをUDCで強引に割付けて
move_uploaded_fileをやっちゃうと、フォルダかファイルの名前がないぜというエラー
が出ちゃって、移動できないよ・゚・(つД`)・゚・ ウワァァァン
WebServerと保存先となる別Serverの2台構成で、なおかつIIS6を使う時
どうやってuploadファイルを別サーバに移せばよいんだ?
おちえてくれい
0249nobodyさん
2007/12/06(木) 22:56:40ID:???0250240
2007/12/06(木) 22:57:51ID:???10までで切り捨てたいのですが・・・
forなら i <= 10 こんな感じでできそうですが。
0251nobodyさん
2007/12/06(木) 22:59:49ID:???0252nobodyさん
2007/12/06(木) 23:00:27ID:???情報の小出しをやめろ。
それだけで大分違うんじゃね?
0253nobodyさん
2007/12/06(木) 23:01:57ID:???0254250
2007/12/06(木) 23:06:23ID:???0256nobodyさん
2007/12/06(木) 23:15:16ID:???値の重複を持つフィールドのレコードを引っ張りだしたいのですが、
$st = $db->prepare("SELECT * FROM goods WHERE name = 'バナナ'");
$st->execute();
$ar = array();
$ar = $exe->fetch(PDO::FETCH_ASSOC);
foreach($ar as $key => $value){
echo "キー: $key; 値: $value;
}
では一つのレコードしか表示されません。
重複したレコード全部を表示させるためにはどうすれば良いでしょうか?
0258nobodyさん
2007/12/06(木) 23:19:45ID:???みたいな本はないんだろうな。
デバッグの仕方、問題点の探し方を知っていればこのスレの世話になることもないだろうに。
0259nobodyさん
2007/12/06(木) 23:23:49ID:B7iDUoX7実際にブラウザで開くphp --------------------------------
require_once("testclass.php");
$testPrint= new testPrint();
$testPrint->printIt();
testclass.php ----------------------------------------
require_once("arrayList.php");
class testPrint{
function printIt(){
for($i=0;$<2;$++){ print $this->testAry[$i];}
}
}
arrayList.php --------------------------------------
$testAry = array("a","b","c");
恥ずかしながらこの程度のものが良くわかりません
イメージではabcって出力するつもりだったんですが、、
おねがいします
0261nobodyさん
2007/12/06(木) 23:36:39ID:B7iDUoX7ありがとうございます
うー、ごめんなさい おかしいのはtestclass.phpってことですか?
0263259
2007/12/06(木) 23:46:32ID:B7iDUoX7ありがとうございます、スコープの概念が良くわかってないみたいです
ためしにクラスの中にrequireしてみたんですが、
require_once("arrayList.php");
class testPrint{
エラーで画面真っ白になりました
元の実行するphpにrequire_once("arrayList.php");してもダメだし、、
外部ファイルから読み込むのが無理ってわけでしょうか?
0264nobodyさん
2007/12/06(木) 23:49:54ID:???function printIt(){
require_once("arrayList.php");
for($i=0;$<2;$++){ print $testAry[$i];}
}
or
function __construct()
{
require_once("arrayList.php");
$this->testAry = $testAry;
}
or
$testPrint= new testPrint();
$testPrint=$testAry;
$testPrint->printIt();
0265nobodyさん
2007/12/06(木) 23:50:01ID:???0266nobodyさん
2007/12/06(木) 23:51:01ID:???testPrint->testAry = $testAry;
0267nobodyさん
2007/12/06(木) 23:51:37ID:???0268259
2007/12/07(金) 00:29:14ID:buUfpIh5ありがとうございます
ただ、真ん中のコンストラクタを使うやり方を試しましたが うまくいきませんでした
function __construct(){
require_once("arrayList.php");
echo $testAry;//@
$this->testAry = $testAry;//A
}
@をためしに追加してみたんですが、NULLが帰ってきました (testArray.phpにはもちろんあります)
これがNULLってことはAも当然失敗すると考えていいんでしょうか?
なんか変なことしてたら申し訳ありません 引き続きテストしてみますので、
気づいたことがあったら教えてください
0269nobodyさん
2007/12/07(金) 00:30:55ID:???0270259
2007/12/07(金) 00:37:06ID:buUfpIh5var_dump($testAry);//@
でした
ちなみに、以下を試してみたら、「NULL NULL コンストラクタNULL」という結果でした
function __construct(){
//配列リストの読み込み
require_once("arrayList.php");
var_dump($testAry);
var_dump($this->testAry);
echo "コンストラクタ";
$this->testAryX= $testAry;
var_dump($this->testAryX);
}
まいったな… なんでだろう
0271nobodyさん
2007/12/07(金) 00:59:54ID:???あとは
・arrayList.phpはPHPモードに入っているのか
・testPrintクラスはちゃんとインスタンス化しているのか
0272nobodyさん
2007/12/07(金) 01:13:18ID:???0273nobodyさん
2007/12/07(金) 02:00:20ID:zHjm6pQT■ このスレッドは過去ログ倉庫に格納されています