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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん05/03/13 16:08:32ID:???
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/
0167nobodyさん2005/03/21(月) 14:14:44ID:???
>>159
(1) ちゃんとhttpdの設定でHTTPヘッダに適正な文字コードの出力がなされ、
かつHTMLドキュメントのMETAの方でも適正な文字コードが指定されてれば
まず問題はないので絶対とは思わない。しかしブラウザによってはPOSTする
文字コードが混乱して変なことになったことがあるので、
余り混在させるべきではないと経験的に考える。
(2) DWを知らんので回答できず
0168nobodyさん2005/03/21(月) 14:24:10ID:???
>>165
素直にセッション使ってSIDをURLに付加すればいいと思う。
0169nobodyさん2005/03/21(月) 18:49:50ID:???
echo ltrim('web_content/text','web_con');
echo ltrim('web_content/text','web_cont');

上と下では結果が結構違うんだけども・・
何故に?

あ、やりたいことは親ディレクトリ名を切り取りたいだけです。。orz
0170nobodyさん2005/03/21(月) 19:05:27ID:???
>>169
どうおかしいと感じたのか書いてないので想像するしかないですが、
ltrimの2つ目のパラメータの意味を勘違いしているものと思われます。
ltrimの2つ目のパラメータは「削除したい全ての文字をリスト」したものです。(not 文字列)

1つ目のltrimは、8文字目のtでパラメータに無い文字を発見するので、それ以降の文字が返されます。
2つ目のltrimは、12文字目の/でパラメータに無い文字を発見するので、それ以降の文字が返されます。
目的にそぐわない関数だと思われます。
0171nobodyさん2005/03/21(月) 19:27:49ID:???
>>169
指定するパラメータは「文字列」でなくて「文字リストの列」なんだが理解してる?
0172nobodyさん2005/03/21(月) 19:35:59ID:???
トリミングをそういうふうに使うのもめずらしい
0173nobodyさん2005/03/21(月) 20:59:31ID:???
あー、なるほど。本に
ltrim($xxx, "-");
って載ってるから同じような物かなーと思ったけど、
第2パラメータの文字列が配列として1文字ずつ比較(?)されてたから、
第1パラメータのみに存在する文字が出た時にそこから後ろが抽出された訳・・かな?

>>170 (なんかカコイイ。。Thanks!)
>>171
>>172
ありがとうございました。
と、言うわけで質問します。

カレントディレクトリ名を取得する関数などはあるのでしょうか?
フルパスではなくて、ディレクトリ名です。
www.xxx/php/index.htm の場合、 php とディレクトリ名を取得したい。
0174nobodyさん2005/03/21(月) 21:04:01ID:???
PHP5ってのがあるけど
これってPHP4のスクリプトは書き換えないと使えないの?
0175nobodyさん2005/03/21(月) 21:39:18ID:???
>>173
$path = "www.xxx/php/index.htm";
echo basename(dirname($path));
01761312005/03/21(月) 23:25:37ID:???
>137
亀レスですが、ご丁寧にありがとう。
まだPHPを触り始めて1週間とかなので、
非常に参考になります!
0177nobodyさん2005/03/22(火) 18:29:04ID:LgrnIX4+
前スレ636です。
ログファイルに<!--- --->で囲まれた部分を複数出力する方法を
お尋ねしたところ
$reg = "/<!--- (.+?) --->(.+?)<!--- \/\\1 --->/";
preg_match_all($reg, $RetrieveFile, $DataPrint);
と御教授いただいたのですがechoの書き方がわからず参ってます。
echo $DataPrintと書いてもecho $DataPrint[0とか1とか2とか]書いても
全てArrayになるのですが、$regの2番目の(.+?)に該当する部分を
出力するにはどうしたらいいのでしょうか?
0178軟式PHP2005/03/22(火) 18:53:07ID:???
とりあえずprint_rなりvar_dumpなりしてみて自分で考えれ。
0179nobodyさん2005/03/22(火) 22:34:54ID:???
>>177
つミ
 print_r($DataPrint);
0180nobodyさん2005/03/22(火) 23:19:38ID:???
すまん、自身の変数名を文字列として取得する方法(関数)ってあったけ?
0181nobodyさん2005/03/22(火) 23:23:26ID:???
string getMyName(string varname) だったとして、どうやってその関数を使うつもりなんだろう。。
0182nobodyさん2005/03/23(水) 21:06:12ID:???
匿名関数じゃ駄目なのかな
0183nobodyさん2005/03/24(木) 12:27:03ID:uQ7Kwr2a
連想配列って英語で何ていいますか。
0184nobodyさん2005/03/24(木) 12:50:25ID:???
associative array
0185nobodyさん2005/03/24(木) 16:11:55ID:cbGEPWrc
http://hoge.com/?foo=1&bar=2&null=0
といったように複数の条件を指定して、その値に従ってページを遷移するPHPスクリプトはご存じでしょうか?
探したのですが、レッツPHPのダウンロードカウンタは1つの条件しか持てないようなので・・
http://php.s3.to/data/#dl
0186nobodyさん2005/03/24(木) 18:50:34ID:???
>>185
詳しく
0187nobodyさん2005/03/24(木) 19:18:33ID:???
>>185
フレームワーク使ったら?
0188nobodyさん2005/03/24(木) 19:58:00ID:???
>>185
ページを遷移する、という意味が分からないんだが…
こんなのが欲しいんか?

<?php
$foo = ceil($_GET['foo']);
$bar = ceil($_GET['bar']);
$null = ceil($_GET['null']);

//リダイレクトするURL
$urls[0][0][0] = 'http://www.google.co.jp/';
$urls[0][0][1] = 'http://www.yahoo.co.jp/';
$urls[1][1][0] = 'http://www.goo.ne.jp/';
・
・

header('Location: '.$urls[$foo][$bar][$null]);
?>
01891852005/03/24(木) 20:42:36ID:???
>>188
そういう感じです。
何処を見ていいかわからなかったもので検索後もいろいろ試してみたんですが・・
やってみます、ありがとうございました。
01901852005/03/24(木) 20:50:30ID:???
一応書いておきますけど、下のようにソフト名・OS・バージョンにより、ダウンロードページに移動させるスクリプトの予定です。
http://hoge.com/?product=foo&version=1.2&os=mac
0191nobodyさん2005/03/24(木) 21:36:58ID:???
>190
それリダイレクトなんかじゃなく
ちゃんとデータベース作ってやった方がいいですよ
0192nobodyさん2005/03/25(金) 01:01:55ID:???
>>191
何言ってんだお前
0193nobodyさん2005/03/25(金) 03:25:56ID:EQZt/eu0
popenを使ったPHPスクリプトにチャレンジしてます。
以下のようなスクリプトをシェル上で実行すると ghijk がちゃんと
出力されるのですがweb経由でスクリプトにアクセスすると何も表示されません。
どうすればwebでも読めるようになりますか?

<?php

$data = "abcdef\nghijk\nlmnopqr";

$fp = popen("/usr/bin/grep 'i'", "w");
fputs($fp, $data);
pclose($fp);

?>
0194nobodyさん2005/03/25(金) 03:55:14ID:???
>>193
環境。
01951932005/03/25(金) 07:21:03ID:???
>>194
失礼しました。環境は
OS: FreeBSD、PHPバージョン: 4.3.10
です。
0196nobodyさん2005/03/25(金) 14:33:31ID:???
変数に評価式を入れて
それをifに渡してやることって可能ですか?

以下のようなイメージです。

$f = 'is_string($str) && strlen($str) > 0';
if($f){
  // 文字列
}else{
  // それ以外
}
0197nobodyさん2005/03/25(金) 14:48:19ID:???
>>196
eval使えばできないことは無いと思うが用途がわからん
if(式)じゃなんでだめなの
0198nobodyさん2005/03/25(金) 15:13:24ID:???
>>197
ユーザに評価式を入力してもらいたかったんです。
evalで出来そうですね。
0199nobodyさん2005/03/25(金) 15:30:26ID:???
そ、それはセキュリティ的に恐ろしいぞ。
0200nobodyさん2005/03/25(金) 15:42:25ID:???
>>195
そういう意味じゃなくて、194はコンソールアクセス(成功した方)と
同等の環境(権限とかパスとか)をWebアクセスにも与えろってことだと思うよ。
0201nobodyさん2005/03/25(金) 15:55:13ID:???
>>198
入力されたものをevalするのはやめろ
readfile(\"/etc/passwd\");
とか入力されるぞ
0202nobodyさん2005/03/25(金) 16:06:32ID:???
>>201
今時シャドーだけどな
0203nobodyさん2005/03/25(金) 16:21:45ID:???
>>199,201
どうもです。確かにそうですね。
02041932005/03/25(金) 19:31:21ID:???
>>200
えっと、grepのパスも/usr/bin/grepとフルパスで指定しているし
grepのパーミッションも-r-xr-xr-xの状態ですけど、これ以外にも
環境を合わせないといけないところがあるということでしょうか?
0205nobodyさん2005/03/25(金) 19:38:48ID:???
>>193
何も表示されないとか意味の無い情報じゃなくて、
実際はどんなエラーが出てるの?
02061932005/03/25(金) 20:22:33ID:???
>>205
とりあえずerror_logには何も残ってません。
ブラウザー上にはエラーさえも出ません。
念のためtelnetでwebサーバーにつなげてみましたが以下の通り
ヘッダ以下には何も書いてありませんでした。
$ telnet www 80
Trying xxx.xxx.xxx.xxx...
Connected to www.
Escape character is '^]'.
GET /~myuser/test.php HTTP/1.0

HTTP/1.1 200 OK
Date: Fri, 25 Mar 2005 11:16:58 GMT
Server: Apache
X-Powered-By: PHP/4.3.10
Content-Length: 0
Connection: close
Content-Type: text/html

Connection closed by foreign host.
$
0207nobodyさん2005/03/25(金) 20:55:19ID:???
>>206
error_logには何も残さず、HTTPでも何も吐かないように
設定していると通常はそうなります。
02081932005/03/25(金) 21:11:43ID:???
>>207
なるほど。そういうものだったんですか。
サーバー管理者ではないのでphp.iniとかの書き換えはできませんが
error_reporting(E_ALL);
を付け加えてやってみました。error_reporting関数を使っても
エラーは何も出てこないですねー…
0209nobodyさん2005/03/25(金) 21:36:57ID:???
>>208
display_errorsやほかその他エラー関連の設定は?
エラー関連の設定はほぼ全部ini_setで変更できる
0210nobodyさん2005/03/25(金) 23:41:48ID:???
/usr/bin/grepなんて家にはないがSELinuxが絡んでるかもね
0211nobodyさん2005/03/26(土) 02:13:41ID:???
>>193
popenで開いて、開いたプロセスに$dataを入力として渡してるが、
プロセスからの出力は、拾ってないぞ?
popenは一方向のパイプしか扱えないから、
proc_openをつかえ。
んで、fputsで$data渡した後、fgetsなりなんなりして結果を取得してくれ。
proc_openの使い方はpopenとは異なるからマニュアル嫁よ。
02121932005/03/26(土) 06:11:40ID:???
>>209
ini_setで変更できるの初めて知りました。
とりあえず以下を追加しましたがやはり何もエラーは残りませんでした。
ini_set("display_errors", "on");
ini_set("log_errors", "on");
ini_set("error_log", "log.txt");
02131932005/03/26(土) 06:12:06ID:???
>>211
proc_openのマニュアルttp://php.s3.to/man/function.proc-open.html
を読みました。よくは理解できなかったのでサンプルを参考に作ってみました。
やはりシェル上では動きますがweb上では何も表示されませんでした。
<?php

$data = "abcdef\nghijk\nlmnopqr";

$descriptorspec = array(
 0 => array("pipe", "r"), // stdin is a pipe that the child will read from
 1 => array("pipe", "w"), // stdout is a pipe that the child will write to
 2 => array("file", "/tmp/error-output.txt", "a") // stderr is a file to write to
);

$process = proc_open("/usr/bin/grep 'i'", $descriptorspec, $pipes);
if (is_resource($process)) {
 fputs($pipes[0], $data);
 fclose($pipes[0]);

 while(!feof($pipes[1])) {
  echo fgets($pipes[1], 1024);
 }
 fclose($pipes[1]);
 proc_close($process);
}

?>
0214nobodyさん2005/03/27(日) 12:04:17ID:VfQV7VpE
ホームディレクトリ以下の特定ディレクトリ内でのみ
phpを使えるように設定しているのですが、どうも期待通りに動いてくれません。

/home/*(username)/public_html/php以下でのみphpを動かしたい
open_basedir = php
user_dir = public_html
とやってみたのですがダメでした。

どの辺の設定をいじればいいのでしょうか?
0215nobodyさん2005/03/27(日) 12:50:21ID:???
>>214
・「期待通りに動かない」とはどうなるのか。
・そのopen_basedirとかは何の設定なのか。
0216nobodyさん2005/03/27(日) 17:08:31ID:???
>>214
それはPHPじゃなくてhttpサーバの仕事だよ
Apacheなら.htaccessで設定できるから該当のスレにどうぞ
0217nobodyさん2005/03/27(日) 18:30:34ID:o5yBDsfR
例えば、下記のようなコード時に、

$a = new TestClass();
$b = &$a;

$aと$bが同じものかどうか(内容が同じというわけではなく、
指し示すメモリの場所が同じ)を検知したいのですが、
なにか良い方法はあるのでしょうか?

どうかご教示下さい。お願いします。
0218nobodyさん2005/03/27(日) 18:40:49ID:???
>>217
PHPでは不可能だったような希ガス
0219nobodyさん2005/03/27(日) 18:51:03ID:???
>>217
メモリのマッピングをになっているリファレステーブルで
同じ値が割り当てられていることをもって、指し示す
メモリの場所が同じと見なすしかないと思う。

それとも「同じ値が割り当てられている」ことを調べたいのかな?
0220nobodyさん2005/03/27(日) 19:16:43ID:o5yBDsfR
>218,219
やはり無理っぽいですね・・
どうもありがとうございます。
0221nobodyさん2005/03/27(日) 22:18:46ID:???
>>219
>それとも「同じ値が割り当てられている」ことを調べたいのかな?

どうかご教示ください。お願いします
0222nobodyさん2005/03/27(日) 22:49:37ID:???
自動で他人のサイトへのアクセス数を増加させるプログラムは可能でしょうか?
可能だとしたらどうやったらいいのかまったくわかりません。
どなたかご教授よろしくお願いします。
0223nobodyさん2005/03/27(日) 23:26:06ID:???
>>222
意味不明。
田代砲?
0224nobodyさん2005/03/28(月) 00:50:15ID:???
田代砲久し振りに聞いたw

サーチかなんかのランキング上げたいんジャマイカ?
0225nobodyさん2005/03/28(月) 01:31:41ID:???
>>222
知ってても教えない。
0226nobodyさん2005/03/28(月) 07:35:35ID:???
>>223>>224
そうです。でも田代砲まで強力じゃなくて。
10分間に1アクセスくらいでいいです。
PHPじゃなくてJavaScriptで作れるんですか?
PHPで簡単に作れないでしょうか?
作り方のヒントだけでも教えてください。お願いします。
0227nobodyさん2005/03/28(月) 12:02:19ID:???
$dat = "
1
2
3
4
";

$dat = preg_replace("/1(.*)4/","",$dat);

結果が以下のようになりそうでならないのですがどうしてでしょうか?
1
4

0228nobodyさん2005/03/28(月) 12:11:23ID:???
>>227
ヒント:
改行にマッチさせるためにはオプションが必要です
0229nobodyさん2005/03/28(月) 12:47:19ID:???
preg_replace("/1(.*)4/m","",$dat)
preg_replace("/1(.*)4/m","",$dat,'m')でもダメでした^^;
洗濯物を干しながら考えてみます
0230nobodyさん2005/03/28(月) 12:52:21ID:???
>>226
ヒント:「PC常時起動」「META」「リロード」
0231nobodyさん2005/03/28(月) 13:02:34ID:???
>>226
バカ?
田代砲のパラメータを書き換えればいいだけだろ。
02322272005/03/28(月) 13:26:01ID:???
$dat = preg_replace("/\n/","",$dat);
$dat = preg_replace("/1(.*)4/m","\\1",$dat);
とすれば結果が23となるので改行が問題なのはわかるのですが/mをつけても
複数行にはマッチしないようです。複数行の解釈を間違えているのでしょうか?。
0233nobodyさん2005/03/28(月) 13:30:50ID:???
>>232
.(ドット)を改行にマッチさせるのはsです
$dat = preg_replace("/1(.*)4/s","\n",$dat);
02342322005/03/28(月) 13:37:54ID:???
↑じゃ意味無いな
$dat = preg_replace("/1(.*)4/s","$1",$dat);
02352272005/03/28(月) 13:43:42ID:???
>>233
ありがとうございます
0236nobodyさん2005/03/28(月) 16:29:39ID:AxvngZW7
設定ファイルのようなものを作ろうと思うのですが、
今まではクラス化されてないPHPコードべた書きのファイルを作り、
グローバル変数として使うというやり方をしていました。
しかしより洗練されたやり方をと思い、設定ファイル自体を
クラス化し、ゲッター(セッターは必要ないですよね)で値を取得
というやり方を考えました。

前者が駄目なやり方とは思いませんが、後者のやり方は一般的な
オブジェクト指向プログラミングにおいて正しいやり方でしょうか?
オブジェクト指向プログラミングにまだ慣れていないので変な質問かも
しれませんが指揮者のご意見をお聞かせいただければと思います。
02372362005/03/28(月) 16:35:37ID:???
イメージ的には以下のような感じを考えています。

class Config {
 var hoge;
 var fuga;

 // コンストラクタ
 // ここで値をセットするのでセッターはいらない?
 function Config() {
  hoge = "hoge";
  fuga = "fuga";
 }

 // ゲッター
 function getHoge() {
  return $this->hoge;
 }

 function getFuga() {
  return $this->fuga;
 }
}
02382362005/03/28(月) 16:45:56ID:???
コンストラクタの部分は$this->が抜けていました。
失礼しました。
ちなみに今回お聞きしたいのはどちらかというと小規模な開発
というよりも中規模・大規模開発を視野に入れた保守性重視の
オブジェクト指向ガチガチの開発の場合を想定しています。
0239nobodyさん2005/03/28(月) 17:24:23ID:???
>>236
別に決まりは無いので好きなように作ればいいと思いますよ。
自分の場合は値の変わらない設定値は定数にしてます。
0240nobodyさん2005/03/28(月) 18:06:19ID:???
>>238
だったらフレームワークを使え。
0241nobodyさん2005/03/28(月) 19:44:33ID:???
テーブルに2次元配列にして10行10列位表示したいのですけど、
どのようなやり方になるのでしょうか?配列に慣れていないので
よくわからないのです。ご指導宜しくお願いします。
0242nobodyさん2005/03/28(月) 19:51:02ID:???
>>241
配列に慣れてないのは構わないんだが、
それ以前に自分の伝えたいことを書き表すのに慣れてないような気が。

そこで指し示す"テーブル"とは具体的に何?
0243nobodyさん2005/03/28(月) 20:02:18ID:???
>>242
具体的にはexcelのワークシートです。
(0.0)、(0.1)、(0.2)のように入れていきたいんです
0244nobodyさん2005/03/28(月) 20:26:42ID:???
>>243
htmlのテーブルを使って素直に書くと、
<table>
<tr><td><?php echo $array_data[0][0]; ?></td><td><?php echo $array_data[0][1]; ?></td>〜</tr>
<tr> 〜</tr>
〜
</table>
つー風にも書けるけど、それさえも分からんってことじゃないでしょ?
何に困ってるのかよく分わかんないよ。
02452262005/03/28(月) 23:06:17ID:???
田代砲ってどこにありますか?
探したけど見つかりませんでした。
0246nobodyさん2005/03/28(月) 23:11:38ID:VOOnUpPo
PHPで.htmlファイルを出力させられる?
indexファイルがindex.htmlじゃないとダメで、
テンプレ部分とかいちいち書き直すの面倒なんです
0247nobodyさん2005/03/28(月) 23:21:42ID:???
>>246
datファイルの出力もできますし、htmlファイルの出力もできます。
0248nobodyさん2005/03/29(火) 10:39:10ID:???
ログファイルの一番上の1行だけ読む関数って無いのか?
0249nobodyさん2005/03/29(火) 11:40:58ID:???
>>248
fopen
fgets
fclose
あーはん?
02502482005/03/29(火) 11:50:32ID:???
>>249
あんだーすとぅっど。�dクス。
0251nobodyさん2005/03/29(火) 13:10:08ID:???
>>243

>244とヘッダーにおっすおらエクセルよろしくな!って書けば終わりじゃね?

それ以外だとエクセル調べるしかないのでスレ違いだと思われ
0252nobodyさん2005/03/29(火) 13:31:54ID:???
>>251
>おっすおらエクセルよろしくな!
いっちょやってみっか じゃないのか。
0253nobodyさん2005/03/29(火) 14:02:19ID:fSc5qMir
フォームから受け取った文字列に含まれる全角スペースを
すべて取り除きたいのですが、下のようにしても取れてないようです。
どこが間違えてるんでしょうか?

$hoo=$_POST['hoge'];
$hoo=str_replace(" ","",$hoo);
0254nobodyさん2005/03/29(火) 14:56:39ID:???
合ってるよ、文字コードの問題じゃないのかね。
0255nobodyさん2005/03/29(火) 17:06:13ID:???
質問です。
当方、PHP 4.3.9 を先日インストールしました。

<?php

$name = $_SERVER["PHP_SELF"];
echo $name;

?>

と書いても何も表示されません。
スーパーグローバル変数がPHP 4.1.0 から使用できることは知っているのですが、
それ以外にphp.iniの設定などがあるのでしょうか?


0256nobodyさん2005/03/29(火) 17:22:55ID:???
まずは
<?php
phpinfo();
?>
0257nobodyさん2005/03/29(火) 18:11:22ID:???
>>255
サーバーがAn HTTPD だったりしないか?
0258nobodyさん2005/03/29(火) 18:42:20ID:3cB8cobm
$array = array(
"a" => "10",
"b" => "20",
"c" => "30"
);

$pop = array(
"20",
"30"
);

という二つの配列があって、$arrayから、$popの値が同じデータを削除したいのですが
なんか上手い方法ないですか?
02592582005/03/29(火) 19:01:41ID:???
あ、ちなみに自分で考えた方法は
foreach($array as $key => $val){
$flag = 0;
foreach($pop as $del){
if($val == $del){
$flag = 1;
}
}
if($flag != 1){
$newArray[$key] = $val;
}
}
です。
0260nobodyさん2005/03/29(火) 19:10:51ID:???
$array = array_diff($array, $pop);
じゃだめ?
0261nobodyさん2005/03/29(火) 19:23:44ID:???
foreach($pop as $value){
print array_search($value,$array);
}
てのもありかと。
02622612005/03/29(火) 19:25:18ID:???
あ。重複を見つけたいんじゃなくて削除だったか。スマソ
0263nobodyさん2005/03/29(火) 21:47:23ID:???
>>259
array_search を使ったら?
0264nobodyさん2005/03/30(水) 02:30:53ID:???
foreach ループを途中で抜ける命令ってあったっけ?
0265nobodyさん2005/03/30(水) 02:48:37ID:???
break;
0266nobodyさん2005/03/30(水) 02:52:54ID:???
>>265
トン
■ このスレッドは過去ログ倉庫に格納されています