【PHP】くだらねぇ質問はここに書き込みやがれpart9
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/09/03(土) 11:53:32ID:7OO4C5e5ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
次スレは>>970あたりが建てて下さい
・過去スレ
【PHP】くだらねぇ質問はここに書き込みやがれ
http://pc5.2ch.net/test/read.cgi/php/1099322141/
【PHP】くだらねぇ質問はここに書き込みやがれpart2
http://pc5.2ch.net/test/read.cgi/php/1105218084/
【PHP】くだらねぇ質問はここに書き込みやがれpart3
http://pc5.2ch.net/test/read.cgi/php/1107780435/
【PHP】くだらねぇ質問はここに書き込みやがれpart4
http://pc8.2ch.net/test/read.cgi/php/1110697712/
【PHP】くだらねぇ質問はここに書き込みやがれpart5
http://pc8.2ch.net/test/read.cgi/php/1114787573/
【PHP】くだらねぇ質問はここに書き込みやがれpart6
http://pc8.2ch.net/test/read.cgi/php/1117945031/
【PHP】くだらねぇ質問はここに書き込みやがれpart7
http://pc8.2ch.net/test/read.cgi/php/1121100429/
【PHP】くだらねぇ質問はここに書き込みやがれpart8
http://pc8.2ch.net/test/read.cgi/php/1123431535/
0002nobodyさん
2005/09/03(土) 12:51:30ID:???0003nobodyさん
2005/09/03(土) 13:50:11ID:???作成にあたりセキュリティ面に不安があり、皆様のご意見を聞かせていただけたらと思います。
例えばユーザーが編集したページデザインが
<html><head><head><body>
名前:#namae<br>
タイトル:#title<br>
</body></html>
だったとしてこれを元に
<?php
echo '<html><head><head><body>名前:'.$namae.'<br>タイトル:'.$title.'<br></body></html>';
?>
(↑#namaeを '.$namae.' に#titleを '.$title.' に変換しただけ)
このようなincludeファイルを作って表示された場合に、シングルクウォートの入力を許可するとPHPの関数が実行可能となってしまいますが、
シングルクウォート以外を使って関数の実行は可能でしょうか?デザインの編集はフォームで行います。
ソース中の記号が読みにくいかと思いますがよろしくお願い致します。
0004nobodyさん
2005/09/03(土) 14:11:34ID:7K8wd7Ia#namaeを
<?php echo $namae; ?>に
置き換えればいいんじゃね?あとは普通のHTML。
00053
2005/09/03(土) 14:37:13ID:???ユーザーが>>2のようなデザインをフォームから投稿すると
str_replace("#namae","'.\$namae.'")
といったように書き換えて>>2のようなincludeファイルを作成します。
掲示板のPHPは記事データ($namaeや$title)を読みこんだ後で
作成された>>2のincludeファイルを読み込んでincludeされたファイルがデータを表示します
ユーザーが作成するデザインでシングルクウォートが使えると
<html><head><head><body>
名前:#namae<br>';
$fp = ("./bbs.php");
$txt = fread($fp,filesize($file));
echo $txt;
echo '
タイトル:#title<br>
</body></html>
といった感じに書かれてしまうと、自由にPHPを実行されてしまいます。
シングルクウォート以外に禁止したほうがいい文字列なんかありますでしょうか?
わかりづらい文章ですみません。
0006nobodyさん
2005/09/03(土) 19:34:03ID:???#name → $nameという処理を特定のものだけに制限すれば、あとは、HTML内のただの文字にしかならないと思うけど。
0007nobodyさん
2005/09/03(土) 20:21:17ID:???お前が「レンタルールを提供するサイトを運営している」事が驚きだね。
ついでに言っとくが、この結果はどうなると思う?
$data = "'A';print 'TEST';";
echo $data
00087
2005/09/03(土) 20:22:22ID:???0009nobodyさん
2005/09/03(土) 22:03:46ID:???よくわからんが、
$namaeにPHPコードがあると
echo $namae
でPHPコードが実行されるもんなのか?
includeファイルだからなるの?
includeだとPHPを実行しちゃうの?
じゃincludeしなければいいんだ。
ファイル読み込みとechoでinclude代用
0011nobodyさん
2005/09/03(土) 23:15:45ID:/h7Yu57rひとつのPHPファイルの中で2回以上使用するとredeclareできないというエラーが出てきます。
function hoge($data) {
function hogege($data) {
$data .= "-hogege";
return $data;
}
$data = hogege($data);
$data .= "-hoge";
return $data;
}
上記のような関数を2度以上使うとエラーがでました。
これはまずPHPファイル読み込み時にhoge()が宣言され、
内部のhogege()はhoge()が呼び出されるたびに宣言することになるからだと理解したのですが、
対処としてはhogege()をhoge()の外で宣言するしかないのでしょうか?
ある関数について宣言されていなければ宣言する、といったようなことは可能なのでしょうか?
001211
2005/09/03(土) 23:39:37ID:???0013nobodyさん
2005/09/03(土) 23:40:32ID:6exF3kawヒントだけでもキボンヌです
00143
2005/09/04(日) 00:00:45ID:???ご意見ありがとうございます。
7>>
シングルクウォートの入力は許可してないのでそのコード自体書き込めません。
ためしにシングルクウォートのチェックはずして
$data = "'A';print 'TEST';";
echo $data ;
と入れてみましたが parser errorでした。
すべてダブルクウォートにしてもHTMLで出力されるだけでした。
すみません質問の仕方かえます。
$a='かきくけこ';
echo 'あい'.$a.'うえお';
↑これだと$aが展開されると思いますが、''内でシングルクウォートを使わずに$aを展開することは技術的に可能でしょうか?
0015nobodyさん
2005/09/04(日) 00:04:02ID:???私はそのような内部関数を作ろうと思ったことは無いのですが、
本当にそれが必要なのでしょうか?
OOPの内部クラスとも違いますよね。
展開してしまえば、関数定義も、関数呼び出しも要りません。
function_exists() でテストするコストも減らすことができます。
言語で出来ることをいろいろ試すという目的なら分かるのですが。
0016nobodyさん
2005/09/04(日) 00:25:14ID:KQPE/gyzexec
shell_exec
というなんかできそうなのがあるよ
001711
2005/09/04(日) 00:27:47ID:???定義した関数の中で複数箇所で実行したい処理をその関数内でのみ関数として定義したいのです。
具体的には、フォームで受け取った値を種別にチェックする関数を作っているのですが、
(「年」「月」「日」「ユーザーID」その他DBに設定した項目にあわせてチェック)
その中で、たとえば整数かどうかのチェックを行う関数や、
SQLでIN句に使用する('data1','data2',,,)という文字列を作成する関数を作っています。
「展開してしまえば」というのは、関数で定義もせず、その都度処理を全部記述するということでしょうか?
あまり効率的でないように思えるのですが、どうなんでしょうか?
0018nobodyさん
2005/09/04(日) 00:33:18ID:KQPE/gyz{}とかは無理?
0019nobodyさん
2005/09/04(日) 00:35:02ID:???現在サーバーの設定ファイルを弄るPHPを作っているのですが、
「権限」の面で非常に困っています。
単純にApache権限では各種設定ファイルへアクセスすることは
できないわけですが、
通常どのような手段を用いるものなのでしょうか?
(PHPというよりはむしろ鯖管理の知識になるのでしょうか?)
0020nobodyさん
2005/09/04(日) 00:43:58ID:???個人的には、素直に外に出した方が良いと思います。
整数かどうか、というチェックなら頻繁に使われるでしょうし、標準の関数もありますよね。
私は、PHPで内部関数を作ること自体に(見た目的にも)違和感があります。
その関数内でしか使わないような関数であっても、外に出しています。
もちろん個人の好みなのかも知れませんが。
002111
2005/09/04(日) 01:20:25ID:???中身は整数だけど文字列になってたりするので標準の関数が使えなかったりするんですよ。
他にも多数のPHPファイルにその都度全部一連の処理を繰り返し記述するのは苦痛にしか感じないのですが
そうでない人もいるということなのかな?
まぁ、極力手抜きをしたい、ということなんですけどね。
0022nobodyさん
2005/09/04(日) 01:27:16ID:???PHPでは匿名内部クラスも実装することができないのだろうか。
メソッド内クラスも。
0024nobodyさん
2005/09/04(日) 01:30:23ID:???だったら、
function func1(){
function func2(){
}
}
とせず
ただ
function func1(){
}
function func2(){
}
と分けるだけでいいんでない?
オブジェクト指向を使えば
もっと便利なこともできるけど。
002517
2005/09/04(日) 01:36:37ID:???それだとfunction_existsを使わずに済むのですが、
そもそもfunc2を単独で利用するつもりが全くないので、
見た目的にどうもすっきりしないんですよね。
パーツにしかすぎない関数を同列に並べるのがどうも違和感があるんです。
オブジェクト指向も気になってはいるもののマニュアル等を読んでもいまいちメリットが分かりにくいので
さしあたって関数をガシガシ作って参照するようにしています。
0026nobodyさん
2005/09/04(日) 01:37:22ID:???自作関数の作り方本当にわかってる?
何か勘違いしているような気がしてならないんだけど。
>>11で示されるような
内部関数hogege($data)というのは
関数hoge($data)の中でしか使わない、
だから、内部関数として定義したい
という意味だとおもったけど。
内部クラスのように。
けど>>21をみるとやりたいことはそうじゃないみたいだね。
関数を作っているんだからその作った関数をcallするだけで
その都度同じ重複する処理を書く必要は無い筈なんだけど。
関数は一度作ったら、その関数が定義されているファイルを
include(), include_once(), require(), require_once()で呼び出すだけで
$x = hogege('何か');
のようにすぐ使えるんだけど。
毎回PHPファイルを新たに作成する対に
function hogege($data) {
$data .= "-hogege";
return $data;
}
とか無駄に書く必要は無いよ。
0027nobodyさん
2005/09/04(日) 01:38:41ID:???オブジェクト指向を理解したければ
結城浩の「Java言語で学ぶデザインパターン入門」を
読むことをおすすめするよ。超初心者向けで非常にわかりやすいよ。
0028nobodyさん
2005/09/04(日) 01:39:59ID:???require_once()を使えば、
わざわざ何度もfunction_exists()を呼び出す必要はないと思うんだけど。
require()ってわかる?
require()とrequire_once()との違いもわかる?
0029nobodyさん
2005/09/04(日) 01:41:29ID:???> >>24
> それだとfunction_existsを使わずに済むのですが、
> そもそもfunc2を単独で利用するつもりが全くないので、
> 見た目的にどうもすっきりしないんですよね。
> パーツにしかすぎない関数を同列に並べるのがどうも違和感があるんです。
それなら、もうオブジェクト指向を学ぶしかないでしょ。
そのまえに、まず関数の作り方、使い方くらいおぼえたほうがいいね。
それからrequire()の使い方も。
0030nobodyさん
2005/09/04(日) 01:47:30ID:???b.php 関数b()が定義されている
require.incの中身
<?php
require_once('a.php');
require_once('b.php');
//定義された関数を実行
a();
b();
?>
top.phpの中身
<?php
require_once('require.inc');
//定義された関数を実行
a();
b();
?>
>>11がやりたいことはこれを参考にすれば問題なく実現できるかと思われ。
0031nobodyさん
2005/09/04(日) 01:53:05ID:???どこか問題だからわかりませんでしょうか?
サーバはXREAです。
003211
2005/09/04(日) 02:11:46ID:???>>21の「多数のPHPファイルにその都度全部一連の処理を繰り返し記述」というのは
>>20をなぜか「関数を使わずその都度処理を全部書く」と誤解してしまったがゆえの発言なので、
全ファイルにて同じ関数を定義しているわけではありません。
外部にまとめて定義してあり、各ファイルにてrequire_once()でインクルードしています。
また、function_exists()については、関数を定義しているファイルにて
funtion hoge($data) {
if (!function_exists("hogege") {
function hogege($data) { ....... }
} }
としています。
この時点でrequire_onceや定義した関数の使い方に間違いがあったりするのでしょうか・・・?
>>27の本は以前いろいろ本を調べていたときにも見かけたのですが、
Javaがわからなくてもなんとかなるものなのでしょうか?
0033nobodyさん
2005/09/04(日) 02:26:36ID:gvZ6YCw+$hoge2 = $data2;
$hoge3 = $data3;
続く
こんなのをforを使って一気に書くときに連番の部分に$iとかって
変数を使ったりする訳ですが、文字列として吐き出すのではなく
この連番を含んだ変数名を、変数として実際につくるeval以外の方法はないでしょうか?
0035nobodyさん
2005/09/04(日) 02:46:21ID:???前スレに同じような話題があったような。
これ?でいいのかな?
${'hoge'.$i}
0036nobodyさん
2005/09/04(日) 02:46:32ID:???for ($i=0;$i<10;$i++) {
$hoge_str = "hoge$i";
$data_str = "data$i";
$$hoge_str = $$data_str;
}
0037nobodyさん
2005/09/04(日) 02:51:30ID:???配列やハッシュを使わずになんでわざわざスパゲティコードすれすれになりそうな
そんなことをするのだろうか不思議だ。
一体何をしたいんだい?
0038nobodyさん
2005/09/04(日) 02:54:19ID:???質問の仕方が悪いか、関数のことをわかっているようで
実はわかっていないから誤解されるんだろうが。
だからさ、hogege()はすでに外部に定義してあってrequire_once()で
hogege()関数が定義されたファイルを呼び出していて、
いつでもhogege()を呼び出せるようになっているんだろ?
なのになんでhogege()を再定義しているんだ?
一体何をやりたいんだい?
0039nobodyさん
2005/09/04(日) 03:19:50ID:???> >>27の本は以前いろいろ本を調べていたときにも見かけたのですが、
> Javaがわからなくてもなんとかなるものなのでしょうか?
お前がよほどバカじゃなきゃ、なる。
0040nobodyさん
2005/09/04(日) 07:49:16ID:mRWx0KoE要するにシングルクォートでかこまれた
echo '他人が入力';
で「他人が入力」の部分はシングルクォート以外のどんな文字列にしても
PHPのセキュリティ上問題ないかって事?
0042nobodyさん
2005/09/04(日) 08:53:16ID:MGvOYzObこんなん見っけた
やってみる気あったらケータイでお気に入り登録しとくといいよ
0043nobodyさん
2005/09/04(日) 09:23:23ID:???004511=32
2005/09/04(日) 11:17:27ID:???再定義というか、定義されていない場合にのみ宣言しているつもりなのですが、何か問題があるのでしょうか?
hogege()はhoge()の中でしか定義していません。
>>39
早速買ってみます。
0046nobodyさん
2005/09/04(日) 12:52:20ID:???CGI化してSuexec使うしか無理でしょうか?
004743
2005/09/04(日) 13:00:39ID:???すみません。死ぬほど言葉足らずでした。
WBMPに限らず、一般のビットマップ(例えば24ビット)をGDで扱うにはどうしたらいいですか?
005043
2005/09/04(日) 16:32:47ID:???なんとかGDで「操作」できるリソースの形に持っていくことはできないものでしょうか?
ImageMagickやCJPEGのような外部ツールを使ってJPEGとかPNGとかに変換してしまうと質落ち(というか少なくとも色の変化)は免れないようです。
やったことないですが、ビットマップファイルをPHPのfopenとかで直接読んで解析するのはアホですか?
005133
2005/09/04(日) 16:34:46ID:gvZ6YCw+可変変数っていまいちわからんです。
>>35-36
まさにこれです。サンクス。
>>37
mysql_fetch_arrayをループの外であとから値を取り出したいのです。
そうすればコードもすっきりするので。
0052nobodyさん
2005/09/04(日) 16:50:48ID:???0053nobodyさん
2005/09/04(日) 16:51:35ID:???0054nobodyさん
2005/09/04(日) 17:11:44ID:???0055nobodyさん
2005/09/04(日) 17:14:42ID:???0056nobodyさん
2005/09/04(日) 17:15:49ID:???0057nobodyさん
2005/09/04(日) 17:16:37ID:???0058nobodyさん
2005/09/04(日) 17:17:17ID:???0059nobodyさん
2005/09/04(日) 17:26:04ID:???0060nobodyさん
2005/09/04(日) 17:41:18ID:???POSTで受け取ったデータ(XXXXX)を元にクライアント毎に表示するページを変えたいのですが、
例:http://aaa.aaa/aaa/XXXXX/ こんな感じで
どのようにすればいいのですか?
今は、こんな感じで書いてるのですが、
<a href="http://aaa.aaa/aaa/
<?php
print $_POST['XXXXX'];
?>
/">URL</a>
リンクをクリックさせず、直にリンク先のページを表示させる(1段階作業を減らしたい)方法がありましたら
ご享受ください。お願いします。
0062nobodyさん
2005/09/04(日) 17:49:56ID:???<?php print ウンコ.php?ウンコA=>>60はヴァカ&ウンコB=>>60はアフォ
?>
(ry
0063nobodyさん
2005/09/04(日) 17:53:48ID:???$a[ '>>60aho' ]
$a['>>60aho']
どち?
0064nobodyさん
2005/09/04(日) 17:56:18ID:???0065nobodyさん
2005/09/04(日) 19:06:23ID:w7mb+cHO------------
〜PHPプログラム
?>
<HTML><HEAD>
<?php
〜PHPプログラム
------------
このような記述になってる場合、
------------
〜PHPプログラム
echo "<HTML><HEAD>";
〜PHPプログラム
------------
このようにphp呼び出しをなくしてしまった方が早くなるのでしょうか?
詳しい方がいたら教えてください。
0066nobodyさん
2005/09/04(日) 19:34:24ID:???0067nobodyさん
2005/09/04(日) 20:02:28ID:???0068nobodyさん
2005/09/04(日) 20:03:12ID:iLr51HFA一番いいんでしょうか?
0069nobodyさん
2005/09/04(日) 20:06:12ID:???( (
[0] => Array [0] => hoge
( → [1] => hage
[0] => hoge ...
) )
[1] => Array
(
[0] => hage
)
...
)
左の配列を右の配列のように変換してくれる関数ってありませんか?
一応マニュアルは読んだんですが、自分で書く前に質問しておきます;
0070nobodyさん
2005/09/04(日) 20:47:14ID:???0071nobodyさん
2005/09/04(日) 20:48:46ID:???面倒くさいから自力ではあけない。
ctrl + shift + F と押せば
オートフォーマッタが発動しPHPEclipseがツールで自動的にスペースをあけてくれるように
設定することもできたかと。
0073nobodyさん
2005/09/04(日) 21:29:28ID:???ウェブログのスクリプトを自作しているのですが、トラックバックの部分がどういう決まりになっているか分かりません。
どのようにして相手にトラックバックが知らされるのですか?どのURLに、どのような情報を送信すればよいですか?
RDFに出力する部分は完成しています。
■ このスレッドは過去ログ倉庫に格納されています