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

【PHP】くだらねぇ質問はここに書き込みやがれpart9

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/09/03(土) 11:53:32ID:7OO4C5e5
PHPに関するくだらない質問用すれです。
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
次スレは>>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:???
1乙2ゲト
0003nobodyさん2005/09/03(土) 13:50:11ID:???
レンタルツールを提供するサイトを運営しているのですが、ユーザーが編集したHTMLを元にPHPを作成してオリジナルのデザインを使えるようにしたいと考えています。
作成にあたりセキュリティ面に不安があり、皆様のご意見を聞かせていただけたらと思います。
例えばユーザーが編集したページデザインが

<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。
000532005/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:???
>>5
お前が「レンタルールを提供するサイトを運営している」事が驚きだね。
ついでに言っとくが、この結果はどうなると思う?
$data = "'A';print 'TEST';";
echo $data
000872005/09/03(土) 20:22:22ID:???
あふぅ!なぜコピペしただけのはずなのに「ツ」が抜けてるのだ・・・。
0009nobodyさん2005/09/03(土) 22:03:46ID:???
PHP初心者の便乗質問ですみません。

よくわからんが、
$namaeにPHPコードがあると
echo $namae
でPHPコードが実行されるもんなのか?

includeファイルだからなるの?
includeだとPHPを実行しちゃうの?

じゃincludeしなければいいんだ。
ファイル読み込みとechoでinclude代用
0010nobodyさん2005/09/03(土) 22:08:55ID:???
>>9
まず自分で試されましたか?
質問する前に、自分で試してみましょう。
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()の外で宣言するしかないのでしょうか?
ある関数について宣言されていなければ宣言する、といったようなことは可能なのでしょうか?
0012112005/09/03(土) 23:39:37ID:???
function_exists関数を使うことで解決しました。
0013nobodyさん2005/09/03(土) 23:40:32ID:6exF3kaw
PHPからシェルスクリプトを動作させるにはどうすればいいでしょうか?
ヒントだけでもキボンヌです
001432005/09/04(日) 00:00:45ID:???
>>6
ご意見ありがとうございます。

7>>
シングルクウォートの入力は許可してないのでそのコード自体書き込めません。
ためしにシングルクウォートのチェックはずして
$data = "'A';print 'TEST';";
echo $data ;
と入れてみましたが parser errorでした。
すべてダブルクウォートにしてもHTMLで出力されるだけでした。

すみません質問の仕方かえます。

$a='かきくけこ';
echo 'あい'.$a.'うえお';
↑これだと$aが展開されると思いますが、''内でシングルクウォートを使わずに$aを展開することは技術的に可能でしょうか?


0015nobodyさん2005/09/04(日) 00:04:02ID:???
>>11
私はそのような内部関数を作ろうと思ったことは無いのですが、
本当にそれが必要なのでしょうか?
OOPの内部クラスとも違いますよね。

展開してしまえば、関数定義も、関数呼び出しも要りません。
function_exists() でテストするコストも減らすことができます。

言語で出来ることをいろいろ試すという目的なら分かるのですが。
0016nobodyさん2005/09/04(日) 00:25:14ID:KQPE/gyz
>>やったことないけど
exec
shell_exec
というなんかできそうなのがあるよ
0017112005/09/04(日) 00:27:47ID:???
オブジェクトは使っておらず、通常のユーザー定義関数です。
定義した関数の中で複数箇所で実行したい処理をその関数内でのみ関数として定義したいのです。
具体的には、フォームで受け取った値を種別にチェックする関数を作っているのですが、
(「年」「月」「日」「ユーザーID」その他DBに設定した項目にあわせてチェック)
その中で、たとえば整数かどうかのチェックを行う関数や、
SQLでIN句に使用する('data1','data2',,,)という文字列を作成する関数を作っています。
「展開してしまえば」というのは、関数で定義もせず、その都度処理を全部記述するということでしょうか?
あまり効率的でないように思えるのですが、どうなんでしょうか?
0018nobodyさん2005/09/04(日) 00:33:18ID:KQPE/gyz
>>14
{}とかは無理?
0019nobodyさん2005/09/04(日) 00:35:02ID:???
自宅鯖管理者です。
現在サーバーの設定ファイルを弄るPHPを作っているのですが、
「権限」の面で非常に困っています。
単純にApache権限では各種設定ファイルへアクセスすることは
できないわけですが、
通常どのような手段を用いるものなのでしょうか?
(PHPというよりはむしろ鯖管理の知識になるのでしょうか?)
0020nobodyさん2005/09/04(日) 00:43:58ID:???
>>17
個人的には、素直に外に出した方が良いと思います。
整数かどうか、というチェックなら頻繁に使われるでしょうし、標準の関数もありますよね。

私は、PHPで内部関数を作ること自体に(見た目的にも)違和感があります。
その関数内でしか使わないような関数であっても、外に出しています。
もちろん個人の好みなのかも知れませんが。
0021112005/09/04(日) 01:20:25ID:???
>>20
中身は整数だけど文字列になってたりするので標準の関数が使えなかったりするんですよ。
他にも多数のPHPファイルにその都度全部一連の処理を繰り返し記述するのは苦痛にしか感じないのですが
そうでない人もいるということなのかな?
まぁ、極力手抜きをしたい、ということなんですけどね。
0022nobodyさん2005/09/04(日) 01:27:16ID:???
この様子では
PHPでは匿名内部クラスも実装することができないのだろうか。
メソッド内クラスも。
0023nobodyさん2005/09/04(日) 01:28:12ID:???
>>19
グループ権限を使ってみれば?
0024nobodyさん2005/09/04(日) 01:30:23ID:???
>>17
だったら、

function func1(){
 function func2(){
 }
}

とせず
ただ
function func1(){
}

function func2(){
}

と分けるだけでいいんでない?

オブジェクト指向を使えば
もっと便利なこともできるけど。
0025172005/09/04(日) 01:36:37ID:???
>>24
それだとfunction_existsを使わずに済むのですが、
そもそもfunc2を単独で利用するつもりが全くないので、
見た目的にどうもすっきりしないんですよね。
パーツにしかすぎない関数を同列に並べるのがどうも違和感があるんです。
オブジェクト指向も気になってはいるもののマニュアル等を読んでもいまいちメリットが分かりにくいので
さしあたって関数をガシガシ作って参照するようにしています。
0026nobodyさん2005/09/04(日) 01:37:22ID:???
>>21
自作関数の作り方本当にわかってる?
何か勘違いしているような気がしてならないんだけど。

 >>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:???
>>25
オブジェクト指向を理解したければ
結城浩の「Java言語で学ぶデザインパターン入門」を
読むことをおすすめするよ。超初心者向けで非常にわかりやすいよ。
0028nobodyさん2005/09/04(日) 01:39:59ID:???
>>25
require_once()を使えば、
わざわざ何度もfunction_exists()を呼び出す必要はないと思うんだけど。
require()ってわかる?
require()とrequire_once()との違いもわかる?
0029nobodyさん2005/09/04(日) 01:41:29ID:???
>>25
> >>24
> それだとfunction_existsを使わずに済むのですが、
> そもそもfunc2を単独で利用するつもりが全くないので、
> 見た目的にどうもすっきりしないんですよね。

> パーツにしかすぎない関数を同列に並べるのがどうも違和感があるんです。

それなら、もうオブジェクト指向を学ぶしかないでしょ。
そのまえに、まず関数の作り方、使い方くらいおぼえたほうがいいね。
それからrequire()の使い方も。
0030nobodyさん2005/09/04(日) 01:47:30ID:???
a.php 関数a()が定義されいている
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:???
Reversi 0.3(ttp://webmania.jp/~malu/phpscript.html)を設置したのですが、チャットの文字がが?????????となり化けてしますんです。。
どこか問題だからわかりませんでしょうか?
サーバはXREAです。
0032112005/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+
$hoge1 = $data1;
$hoge2 = $data2;
$hoge3 = $data3;
続く

こんなのをforを使って一気に書くときに連番の部分に$iとかって
変数を使ったりする訳ですが、文字列として吐き出すのではなく
この連番を含んだ変数名を、変数として実際につくるeval以外の方法はないでしょうか?
0034nobodyさん2005/09/04(日) 02:42:03ID:???
>>33
俺なら多くの場合配列で済ませられるから、そっち使うが
そのままで書きたいなら可変変数使ってみれば。
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:???
>>33
配列やハッシュを使わずになんでわざわざスパゲティコードすれすれになりそうな
そんなことをするのだろうか不思議だ。
一体何をしたいんだい?
0038nobodyさん2005/09/04(日) 02:54:19ID:???
>>32
質問の仕方が悪いか、関数のことをわかっているようで
実はわかっていないから誤解されるんだろうが。

だからさ、hogege()はすでに外部に定義してあってrequire_once()で
hogege()関数が定義されたファイルを呼び出していて、
いつでもhogege()を呼び出せるようになっているんだろ?
なのになんでhogege()を再定義しているんだ?
一体何をやりたいんだい?

0039nobodyさん2005/09/04(日) 03:19:50ID:???
>>32
> >>27の本は以前いろいろ本を調べていたときにも見かけたのですが、
> Javaがわからなくてもなんとかなるものなのでしょうか?

お前がよほどバカじゃなきゃ、なる。
0040nobodyさん2005/09/04(日) 07:49:16ID:mRWx0KoE
>>14
要するにシングルクォートでかこまれた
echo '他人が入力';
で「他人が入力」の部分はシングルクォート以外のどんな文字列にしても
PHPのセキュリティ上問題ないかって事?
0041nobodyさん2005/09/04(日) 08:52:02ID:???
>>10
よくわからんから試せねーよ
0042nobodyさん2005/09/04(日) 08:53:16ID:MGvOYzOb
http://mobile.dream-prize.com/member_reg_form.php?REF=0340889
こんなん見っけた
やってみる気あったらケータイでお気に入り登録しとくといいよ
0043nobodyさん2005/09/04(日) 09:23:23ID:???
GDでビットマップファイルを扱うにはどうしたらいいですか?
0044nobodyさん2005/09/04(日) 10:52:02ID:???
>>43
ImageCreateFromWBMP
ImageWBMP
004511=322005/09/04(日) 11:17:27ID:???
>>38
再定義というか、定義されていない場合にのみ宣言しているつもりなのですが、何か問題があるのでしょうか?
hogege()はhoge()の中でしか定義していません。

>>39
早速買ってみます。
0046nobodyさん2005/09/04(日) 12:52:20ID:???
phpをユーザ権限で動作させるのって
CGI化してSuexec使うしか無理でしょうか?
0047432005/09/04(日) 13:00:39ID:???
>>44
すみません。死ぬほど言葉足らずでした。
WBMPに限らず、一般のビットマップ(例えば24ビット)をGDで扱うにはどうしたらいいですか?
0048nobodyさん2005/09/04(日) 13:40:04ID:???
>>47
つImageMagick
0049nobodyさん2005/09/04(日) 14:36:51ID:???
>>47
GDではwindowsbitmapは扱えないんじゃなかったっけ??
0050432005/09/04(日) 16:32:47ID:???
>>48 >>49
なんとかGDで「操作」できるリソースの形に持っていくことはできないものでしょうか?
ImageMagickやCJPEGのような外部ツールを使ってJPEGとかPNGとかに変換してしまうと質落ち(というか少なくとも色の変化)は免れないようです。
やったことないですが、ビットマップファイルをPHPのfopenとかで直接読んで解析するのはアホですか?
0051332005/09/04(日) 16:34:46ID:gvZ6YCw+
>>34
可変変数っていまいちわからんです。
>>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:???
PEAR::Caneldar, PEAR::Dateじゃだめなの?
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:???
PEAR::Calendarのどのあたりが使いにくいの?
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段階作業を減らしたい)方法がありましたら
ご享受ください。お願いします。
0061nobodyさん2005/09/04(日) 17:47:43ID:???
>>60
header("Location: http://〜"); でリダイレクトさせる。
0062nobodyさん2005/09/04(日) 17:49:56ID:???
<a href="http://aaa.aaa/aaa/
<?php print ウンコ.php?ウンコA=>>60はヴァカ&ウンコB=>>60はアフォ
?>
(ry
0063nobodyさん2005/09/04(日) 17:53:48ID:???
おまいら配列のインデックス書くときに1文字あけてますか?
$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:???
Array                  Array
(                     (
 [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:???
>>63
面倒くさいから自力ではあけない。
ctrl + shift + F と押せば
オートフォーマッタが発動しPHPEclipseがツールで自動的にスペースをあけてくれるように
設定することもできたかと。

0072692005/09/04(日) 20:58:57ID:???
>>70
漏れですか?了解。
0073nobodyさん2005/09/04(日) 21:29:28ID:???
PHPの質問ではありませんが、PHPで作成していて、適切なスレが見当たらないので質問させてください。
ウェブログのスクリプトを自作しているのですが、トラックバックの部分がどういう決まりになっているか分かりません。
どのようにして相手にトラックバックが知らされるのですか?どのURLに、どのような情報を送信すればよいですか?
RDFに出力する部分は完成しています。
■ このスレッドは過去ログ倉庫に格納されています