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

【PHP】質問スレッドpart31【php】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/11/27(日) 00:07:12ID:eBvjdczp
PHP全般の質問スレです。
【基本ルール】
・新規質問の方は上げてください。age進行でお願いします。
・質問者は2回目以降、最初のレス番号を名前欄に入れてください。
・回答者は質問者に対して>>(アンカー)をつけてください。
・煽り・荒らしは放置。荒らしに反応した香具師も荒(ry
・解決しなくてもこたえてもらったら礼を。
【質問テンプレ】
・マニュアルを調べたか、google検索したか(調べたキーワード)
・タイトル(禁:教えてください!etc) 例:requireとinclude
・内容 例:requireとincludeはどう違うのですか?
・質問する際には環境も明記。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
【PHP マニュアル】
http://www.php.net/manual/ja/
※マニュアル上部の「search for」から検索を活用すべし(便利)。

過去スレ、関連リンク、FAQ等>>2-10辺り
0703nobodyさん2005/12/24(土) 20:43:17ID:???
ま、とりあえず現状で最大級の脆弱性が塞がってるのは
4も5もそれぞれ最新版1個しかないんだから、選択の余地は無いよね。
>>696って、今のセキュリティ状態を確認した上でこの質問してんのかね?
0704nobodyさん2005/12/24(土) 20:49:31ID:???
>>702
>現行の4.4.1とか、mb_send_mail()にバグあるし
ちなみにどういうバグ?
0705nobodyさん2005/12/24(土) 21:03:59ID:???
文字化けするケースあり
0706nobodyさん2005/12/24(土) 21:04:56ID:???
あと、第4パラメータが完全に無視されてるとか。
0707nobodyさん2005/12/24(土) 21:05:22ID:???
あぁ、なんだやっぱりPHPのバグだったのか
以前実際に起こってちょっと参った…
0708nobodyさん2005/12/24(土) 21:05:56ID:???
思い切ってPHP3を使おうと思う
0709nobodyさん2005/12/24(土) 21:38:44ID:???
>>708
閉じた世界ならいいんじゃね?
0710nobodyさん2005/12/25(日) 00:31:00ID:???
華麗に進入
0711nobodyさん2005/12/25(日) 14:45:31ID:Tho8NAOl
PHP + MySQL で複数人使用可なスケジューラーを作成していたのですが、
ログイン時に、データベースのテーブルに登録済みのIDとPWにマッチすれば認証OKで
その後、自分のスケジュールやプロフィール変更が可能という感じに作りました。

ここで問題点だと思うことを見つけたのですが、
ローカルテストのみだったので、全てのMySQL接続に root@localhost を使用していました。

前までは Perl でテキストにIDとPW保存とかしてたレベルなので気付かなかったのですが、
MySQL接続自体に各個人のID・PWを使用して管理するほうが良いのでしょうか?
0712nobodyさん2005/12/25(日) 15:00:55ID:???
>>711
デフォルト管理ユーザのrootを普通に使ってちゃまずいだろ。
(権限変えてるなら別だが)
PHPアプリからの接続用に適当な権限を設定した
専用ユーザ作って、それ使え。
0713nobodyさん2005/12/25(日) 15:05:51ID:???
>>709
地球上で閉じてます
ならいいですね
07147112005/12/25(日) 15:13:50ID:???
管理人側で予めユーザ登録しておき、POSTされたID・PWでMySQL接続する場合


$login_id = $HTTP_POST_VARS["login_id"];
$login_pass = $HTTP_POST_VARS["login_pass"];
$db_connect = mysql_connect("localhost", $login_id, $login_pass);
if ($db_connect == False) {
print ("認証失敗");
exit;
}
認証後の処理


こんな感じだと思いますが、
結局各個人のスケジュールやプロフィール編集などする場合、
その該当レコードを検索する必要があって、そこにはIDとかが必要だろうし…
ユーザごとにテーブル作成するのはありえないだろうし、


って書いてたら>>712さんキター
分かりました。予め通常のデータ操作のみ可能なユーザを作成し
ログインした人全員が、そのMySQLユーザで接続して書き込みすればいいのですか
ありがとうございました。
0715nobodyさん2005/12/25(日) 16:41:24ID:???
>>714
勿論アプリケーシンにもユーザという概念があるのだから
アプリケーションの部分でユーザアカウント処理と
その為にデータベース(ファイルでも良いけど)に
アカウント管理用のテーブルを設けるのだけどね。
0716nobodyさん2005/12/25(日) 20:13:40ID:WvivzG1I
さくらでcron登録したスクリプトがちゃんと動いてない
みたいなんだけど、何で?

PEARのXML_RSSオブジェクト->parseがダメなみたいっす。
ブラウザからスクリプトにアクセスすればちゃんと動くのに。
0717nobodyさん2005/12/25(日) 20:49:11ID:???
さくらの環境が分からないのでありがちなケースだと、
実行時のカレントディレクトリが違うんで相対パスがこけてるとか。
0718nobodyさん2005/12/25(日) 21:41:54ID:hD4Vkj0e
はじめまして。

自分は現在
<?php echo "
〜〜〜
"; ?>

で、phpでホームページを作っているのですが、そのホームページの中に
ttp://php.s3.to/simple/#short

ここの「−ショートメッセージ−」という物を取り込みたいのですが、どうすればよいのでしょうか。
普通に取り込んでも
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
とエラーが出てしまい、取り込めません。
0719nobodyさん2005/12/25(日) 21:48:35ID:???
>>718
普通に取り込んだってのがどういう取り込み方をしたのか分からんのだが。
0720nobodyさん2005/12/25(日) 21:55:47ID:hD4Vkj0e
>>719

とりあえず「"; ?>」から下に、そのHPにかいてる

「<?
$lines = file($logfile);//ファイルを配列に読み込む
 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
echo $lines[$i];
?>」

をかいて、メッセージボードを設置したい場所に

<td>

<form method=\"post\" action=\"<? echo $_SERVER['PHP_SELF']; ?>\">
<font face="Arial"><b>-ShortMessage- 自由に書き込んで下さい</b> <small>b,i,s,uタグ可</small></font><br>
<b>N:</b><input name=\"name\" type=\"text\" size=\"10\"
maxlength=\"10\" value=\"<? echo $_POST['name']; ?>\">
<b> : </b><input name=\"message\" type=\"text\" size=\"40\" maxlength=\"60\">
<input name=\"submit\" type=\"submit\" value=\" Send \"><br>
</form>

</td>

としてみたところ、エラーがでました。
0721nobodyさん2005/12/25(日) 22:03:35ID:???
>>720
全然普通じゃないじゃん。

> <form method=\"post\" action=\"
この辺のエスケープから察するに、フォームのHTMLをprintか何かで出力してるのか?
だったら
> <? echo $_SERVER['PHP_SELF']; ?>
これをそのまま書いてたらダメだろ。
0722nobodyさん2005/12/25(日) 22:19:28ID:hD4Vkj0e
>>721
すみません、ttp://php.s3.to/simple/#shortにはそう書いてありましたのでそうしてしまいました。

たしかに<? echo $_SERVER['PHP_SELF']; ?> の行でエラーがでます。
どのようにすれば改善できるのでしょうか。
0723nobodyさん2005/12/25(日) 22:25:03ID:???
PHP内でPHPの宣言しなきゃいいだけ
0724nobodyさん2005/12/25(日) 22:36:53ID:hD4Vkj0e
>>723
なるほど、ありがとうございます。
じゃあttp://php.s3.to/simple/#shortに書いてある方法と同じですね。

そのページにかいてある方法では、

使用するページの拡張子を.phpにして、<?include("short.php");?>を挿入します。

と書いてありますが、 「<?php echo "」内に「<?include("short.php");?>」を書くとエラーが起きてしまいますが、
0725nobodyさん2005/12/25(日) 22:44:11ID:???
>>724
何故echo内に書く?
0726nobodyさん2005/12/25(日) 22:49:49ID:hD4Vkj0e
>>725
http://php.s3.to/tt/tt2.php

このページの真ん中にかいてある、
「<?php echo "<html><body text=\"#ffffee\" vlink=\"#ddaa55\">"; ?>」〜〜〜

を参考にしました。「<?php echo」内にHTMLを書いています。

それで、ttp://php.s3.to/simple/#shortには、「<?include("short.php");?>を挿入します。 」
と書いていたからです。
0727nobodyさん2005/12/25(日) 22:56:42ID:???
<?php 〜 ?>内に書かれているHTMLと
(<?php 〜 ?>外の)HTML内にある<?php 〜 ?>では意味が違う。
この辺の基本的な事を理解していないから変な事を書いているのでは?

そもそも元のページは<?php echo"〜"; ?>しか無いのか?
それで何でわざわざPHPで実行する?
0728nobodyさん2005/12/25(日) 23:06:53ID:WvivzG1I
>>717

あ、cronに限らず、telnetでコマンドラインから実行してもダメでした。
$xmlrss->parse();とするとxml_rss objectが生成されている(print_rで確認)ので、
PEARのRSS.phpは読み込めてると思うんですが。。ただ、

[_error_class] => XML_Parser_Error

という値が入ってるのを発見。しかもRSSファイルに入ってる
データは全く取得できてないし。なんじゃこら。

コマンドラインから実行すると、外部サーバーのファイルに
アクセスできないとか?
0729nobodyさん2005/12/25(日) 23:12:14ID:hD4Vkj0e
>>727
ページはindex.phpです。
そこに<?php echo"〜"; ?>を最初と最後にかいて、「〜」にHTMLを記述しています。
0730nobodyさん2005/12/25(日) 23:15:36ID:???
>>729
だから「echoの中のHTML」に<?php 〜 ?>は置けないんだってば。
ちょっと初心者用のphp本買ってきて最初から勉強しなさいな。
0731nobodyさん2005/12/25(日) 23:20:15ID:hD4Vkj0e
>>730
すみません、連休明けの休日にマジメに本買います。

では、「<?php 〜 ?>」が置ける「HTML」の記述ができるphpの記述方法はあるのでしょうか?
0732nobodyさん2005/12/25(日) 23:21:57ID:WvivzG1I
最初と最後の<?php と ?>を取れば多分行けるんじゃない。
それより俺の質問に答えてくれ(笑)

コマンドラインは何が違うんだぁぁ
0733nobodyさん2005/12/25(日) 23:23:07ID:???
>>731
そんな記述が必要なプログラミング内容を考えろ
07347332005/12/25(日) 23:24:31ID:???
「考え直せ」の方が適切だったか。
0735nobodyさん2005/12/25(日) 23:24:59ID:WvivzG1I
ああ、最初のechoも取らないとダメだから、

最初:<?php echo"
最後:"; ?>

を取る。他に問題が無ければそれでHTMLの中のPHP部分は動くはず。
0736nobodyさん2005/12/25(日) 23:30:28ID:hD4Vkj0e
>>みなさん

最初:<?php echo"
最後:"; ?>

を取ったところ、無事解決しました。ご協力ありがとうございます!メリークリスマス!11
0737nobodyさん2005/12/25(日) 23:31:09ID:???
>>732
コマンドラインっつーか、実行権限とパーミッションの関係とか言う話じゃあるまいな
0738nobodyさん2005/12/25(日) 23:32:13ID:???
>>736
遅いよw
0739nobodyさん2005/12/25(日) 23:35:18ID:???
PHPの4.3を使用してます。
関数の戻り値として クラスのインスタンスの参照を返したいのですが
可能でしたらその方法、もしくはキーワードを教えていただけませんか?

// サンプル
function GetInstanceOfFoo()
{
  static $foo;
  $foo = new Foo();
  return $foo;
}

// ↓のようなことがしたい
GetInstanceOfFoo()->SetName("山田 太郎");

以上よろしくお願いします。
0740nobodyさん2005/12/25(日) 23:38:54ID:???
そもそも配布元では、*.htmlに設置する場合のケースを書いているのに、
それを(意味のない)*.phpのページに設置しようとして、
そのまま適用しているので辻褄が合わなくなってる

(全体をechoで囲んでいるくだりを見るに)自分では応用しているつもりなのかも知れんが、
基本がなっていないのであくまでも「つもり」であって、実際は破綻している状況なのは
分かってるのかな・・・?
0741nobodyさん2005/12/25(日) 23:47:21ID:???
>>728
ちょっとコマンドラインから実行した状態でphpinfo()を出力してみた方がいいかも。
Web上で実行したときとPHPの設定がどっか違ってない?
0742nobodyさん2005/12/25(日) 23:48:48ID:???
>>739
マニュアル嫁 ボケナス
0743nobodyさん2005/12/25(日) 23:49:59ID:???
>>740
うーん。まー、*.htmlに記述する場合、って言い方も間違ってると思うけどな。
<? include() ?>は少なくとも動かないといけないんだし、PHPである必要はある。

ただ、PHPはその中にそのまんまHTMLを書けるのに、わざわざ全体を
<?php 〜 ?>で括ってPHPコード化する必要なんて無かったってだけのことなんだよな。
0744nobodyさん2005/12/25(日) 23:59:20ID:WvivzG1I
>>741

あ、PHPのバージョンは違ってますね。
PHP Version 4.4.2-devを使うように指定しているはずなんですが、
4.3.10になります。
0745nobodyさん2005/12/26(月) 00:02:49ID:???
>>744
パスの優先度が低いんだろうな。
0746nobodyさん2005/12/26(月) 00:07:50ID:Zw5jS3w7
パスの優先度。。(ポカーン) <= 素人

ちなみにパーミッションは755。
0747nobodyさん2005/12/26(月) 00:12:45ID:???
>>742
もう少し自分でがんばって見ます。
お気を悪くしたようでしたら申し訳ございません。
0748nobodyさん2005/12/26(月) 00:15:53ID:???
>>746
クライアントじゃどうしようもないとオモ。

PHP4.4.2-devの絶対パスが分かるならそれで起動してみれ
0749nobodyさん2005/12/26(月) 00:18:35ID:???
>>745
#!でphpをフルパス指定してるんじゃないのか?優先度が絡みそうなのはPEARくらいかと。
その4.4.2-devと4.3.10って自分でインストールしたやつ?それともサーバー管理者?
2種類入ってる意図と、その使い分けがどうなってるのかが気になる…。
4.4.2側のCLI版phpを#!のとこで指定できれば解決できそうな気もするんだが。
他にphp.iniの内容が違ってないのなら、という条件は付くかもしれないけど。
0750nobodyさん2005/12/26(月) 00:24:41ID:Zw5jS3w7
*PHP 4.4.2-dev(開発版) 提供のお知らせ*
http://www.sakura.ne.jp/news/archives/20051118-003.news

との事なので、4.4.2-devの絶対パスは分からないっす。
と言うか、これはバージョンの問題?って、そうか、fopenとかの設定?
ちょっと見てみる。
0751nobodyさん2005/12/26(月) 00:31:09ID:???
逆にこれ、Web版を4.3.10で動かしてみれば?って感じだな。
それで動くなら、Web版は.htaccessで設定をローカル変更してると見たが。
0752nobodyさん2005/12/26(月) 00:39:09ID:Zw5jS3w7
>>751

Web版を4.3.10で試す => 実行成功

もしや振り出し?
つーか、phpinfo()って、戻り値1なんだけど(笑)。
これの出力をトラップしてファイルに落とすのはどうしたら
良いのか分からず、今phpinfoチェックできず中。。
0753nobodyさん2005/12/26(月) 00:42:50ID:Zw5jS3w7

疲れた。
カフェオレ飲んで一息つくぞチクショー!
0754nobodyさん2005/12/26(月) 00:50:09ID:???
リダイレクトすりゃいいだけの話だと思うのだが
0755nobodyさん2005/12/26(月) 00:57:19ID:???
>>739
結論から言うと出来ない。
常に一端何らかの変数に入れてからアクセスしれ。
0756nobodyさん2005/12/26(月) 01:12:09ID:???
リモートホストからドメイン部分だけ抜き出すいい方法おしえてください
正規表現だけですべてに対応っていうのは厳しいですかね
0757nobodyさん2005/12/26(月) 01:17:58ID:???
>>756
いや、http://の後に「/」が出てくるまでの文字列抜き出せば良いだけの話だと思うが。
正規表現スレ行けば即効で答え返ってくると思われ。
0758nobodyさん2005/12/26(月) 01:22:27ID:???
漏れならとりあえずparse_url()を試すかな
0759nobodyさん2005/12/26(月) 01:24:02ID:???
>>754

スクリプトはブラウザから指定できない
場所に置いておきたいので、リダイレクトは微妙。

0760nobodyさん2005/12/26(月) 01:29:46ID:???
>>759
phpinfoの結果を知りたいんじゃないの?
だったらリダイレクトしてFTPで引っ張ってくれば良いじゃない。何が微妙なんだ。
0761nobodyさん2005/12/26(月) 01:40:05ID:Zw5jS3w7
あ、cronでウェブ版にリダイレクトしろって事かと。
phpinfoをリダイレクトするってどういう事っすか?
0762nobodyさん2005/12/26(月) 01:43:06ID:???
>>761
シェルで「>」付きで叩くか、ob_関数使えば?
何か変なところで無知だな。
0763nobodyさん2005/12/26(月) 01:47:20ID:???
>>761
cronに書くときに
スクリプト > 出力ファイル名
って書いときゃいいかと
0764nobodyさん2005/12/26(月) 01:48:05ID:Zw5jS3w7
>>762

>シェルで「>」付きで叩くか、ob_関数使えば?
>何か変なところで無知だな。

独学なんで、良く言われる。
そっかシェル使えば簡単だ。PHPでやろうと思ってた。

お陰様でphpinfo()は取得できたので(有難う)、
次は設定内容をチェックしてみる。
0765nobodyさん2005/12/26(月) 01:59:00ID:???
allow_url_fopenはONだし、他の設定もphp.ini通り。
phpのバージョンが古い以外は同じみたいっす。

何か長引いてしまってるけど、付き合ってくれてる人有難う。
0766nobodyさん2005/12/26(月) 02:08:45ID:???
>>763

いや、cronからphpinfo()は見ないっす(笑)。
0767nobodyさん2005/12/26(月) 02:10:49ID:???
ひとまずPEAR使わないで、fopen辺りでどっかのサイトの中身を拾えるか試してみるってのは?
0768nobodyさん2005/12/26(月) 02:21:35ID:???
携帯サイトを作っています

クッキーの使えない携帯のためにセッションを
URLに埋め込む方式を取っているのですが
マニュアルに書いてある通りこれは危険なので
(SIDを埋め込んだURLを他人に教えてしまった時など)
これとは別にDBにSIDとIPの対応表を作って
セキュリティを確保しようとしました。

これは良さそうだと思ったのですが、実装してみて
問題に気づきました。
なんと携帯はアクセスごとにIPが変わってしまうのです。
なのでアクセスごとに同じ人か判別する事が不可能になってしまいました。

セッションを使う際にこれを解決する方法って何かありませんでしょうか。
おねがいします。
0769nobodyさん2005/12/26(月) 02:45:49ID:???
>>767

これだと、google.comは表示されないです。
ただ、ブラウザから実行しても表示されないので・・
何かやっちゃってます?深夜でボーっとしてきた。

<?php

$file = 'http://www.google.com/';
$f = fopen($file, "r") or die("openエラー");
$string = fread($f, filesize($file));
echo "fopen_check<br>".$string;
fclose($f);

?>

0770nobodyさん2005/12/26(月) 02:49:19ID:???
>>769
やっちゃってるな
0771nobodyさん2005/12/26(月) 02:51:20ID:???
やっちゃってますか。
0772nobodyさん2005/12/26(月) 02:58:03ID:???
filesize()がURL相手に使えるのはPHP5だけええぇぇぇぇぇ!!
0773nobodyさん2005/12/26(月) 02:59:23ID:???
>>768
au/vodafonは無条件で固体識別文字列を送ってくるこれをつかえ。
DoCoMoは公式サイトなら固体識別文字列をとれる。勝手サイトだと確認アリでとることが出来る。
0774nobodyさん2005/12/26(月) 08:53:25ID:???
>>773
正確さに欠ける
75点
0775nobodyさん2005/12/26(月) 09:31:53ID:???
>>704
亀レスだけどココにまとまっている。

最近の mbstring 関係のバグのまとめ
http://d.hatena.ne.jp/t_komura/20051105#1131202088
0776nobodyさん2005/12/26(月) 09:32:33ID:???
>>773
vには送らない機種もある。
0777nobodyさん2005/12/26(月) 10:24:49ID:IgYuuYFO
ここでいいのかわかりませんが
今jpgraphを使っているのですがy軸のタイトルに日本語を使用したら
きちんと表示はされるのですが後ろの文字から上になってしまいます。
なにか対処法等あるのでしょうか?
ちなみにwindows phpは4.4.1です。
0778nobodyさん2005/12/26(月) 10:34:09ID:???
>きちんと表示はされるのですが後ろの文字から上になってしまいます。

ここの意味がわからん。もう少し具体的に。
0779nobodyさん2005/12/26(月) 11:16:43ID:IgYuuYFO
>>778
あぁ、すみません。

テ      ト
ス   →  ス
ト      テ

っていう感じになってしまうのです。
07807792005/12/26(月) 11:17:41ID:IgYuuYFO
↑ すいません、横のズレは関係ないです^^;
0781nobodyさん2005/12/26(月) 11:47:09ID:???
>>777
文字列を逆順にすればいいんじゃね?>対処法
07827772005/12/26(月) 11:51:06ID:IgYuuYFO
>>781
ま、まぁそうなんですけど・・。
ありがとうございました。
0783nobodyさん2005/12/26(月) 11:54:10ID:???
>>782
http://ns1.php.gr.jp/pipermail/php-users/2005-November/028129.html
07847772005/12/26(月) 13:14:15ID:IgYuuYFO
>>783
色々すいません、ありがとうございます。
0785nobodyさん2005/12/26(月) 13:43:42ID:nKfhQ7EH
モジュール版でのインストールや動作は、今まで問題なくやってきたのですが、
今回CGI版で動作させたいと思って、PHPのインストールからやり直してます。

./configure with-apx2=/usr/local/sbin/apxs \
--enable-cgi \
--enable-force-cgi-redirect \
〜〜〜あといくつかオプション〜〜〜

make install clean

こんな感じでインストールした後、httpd.confに
Action php-script /cgi-bin/php
Addhandler php-script .cgi .php
と追記し、apacheを再起動しました。

そして、
#!/usr/local/bin/php
<? echo "hello!"; ?>
とだけ書いた test.phpというファイルを作成してブラウザでアクセスすると、
#!/usr/local/bin/php hello!
という具合に、#!/usr/local/bin/php から表示されてしまいます。
ファイルの拡張子を.cgiにすると、そのようには表示されません。

拡張子が.phpの場合、インタプリタ言語として認識される前に、
先にモジュール版のPHPとして処理されているからだと思うのですが、
これは回避しようがないのでしょうか?

OSはFreeBSD5.4R Apache2.05で動作させています。
07867852005/12/26(月) 13:46:00ID:nKfhQ7EH
書き忘れで追記です。

モジュール版とCGI版の両方を使えるようにし、
どちらも拡張子はphpで動作させたくて、
ファイルの1行目にバイナリへのパスがある場合は、CGI版として動作させたいということです。
0787nobodyさん2005/12/26(月) 14:03:39ID:???
>>786
おいおい同じ拡張子でできるわけないだろ
0788nobodyさん2005/12/26(月) 14:06:14ID:???
>>786
ディレクトリ単位で切り替えるか、バーチャルホスト単位で切り替えるか。
0789nobodyさん2005/12/26(月) 14:11:19ID:???
>>787
やっぱりできなくて当たり前なんですね・・・
それが当たり前なのかどうかが分からなくて(死)
すみません。

>>788
その手がありますね。
cgi-binとか作って、そこだけで動作とかですね。
ヒントありがとうございます。
0790nobodyさん2005/12/26(月) 14:41:09ID:???
重たい処理をさせたかったのでsystem関数をしようして
処理用のPHPをバックグラウンドで動かし引数を与えたいのですが
どのように引数を渡し・受け取ればいいのでしょうか?
0791nobodyさん2005/12/26(月) 15:04:39ID:???
>>790
PHPのマニュアルのエロイとこはUserNotesという形で有用なコメントがあることだぬ
その話も載ってるよ。
ttp://jp2.php.net/manual/ja/function.system.php
0792nobodyさん2005/12/26(月) 15:33:28ID:???
>>791
ありがとうございます
エロイ人がとっても参考になりました
0793nobodyさん2005/12/26(月) 18:24:27ID:D+i6TPIN
関数から帰ってきたArrayの要素に直接(変数代入なしで)アクセスする方法ってないですか?

$array = ReturnArray();
$array[1]
と同じことを、イメージ的には
ReturnArray()->[1]
って感じでやりたいのでつが。
0794nobodyさん2005/12/26(月) 18:35:02ID:???
>>793
要はReturnArray()[1]ってやりたいんでしょ。
PHPはそういうのできないんだよね。
method()->propertyができるようになったのもPHP5出てからだし。
現時点では配列の要素へのアクセスは2行に分けて書くしかないかな。
配列の要素を一気に代入するなら
list(, $hoge) = ReturnArray();
でいけるけど。
0795nobodyさん2005/12/26(月) 18:59:57ID:???
>>793
方法はないんじゃないかね。頭と尻だけなら
array_shift()とarray_pop()で取れるけど。
どうしても欲しいならユーザ関数の方を
添え字付きでアクセスするようにするか。
0796nobodyさん2005/12/26(月) 19:41:32ID:???
PHP5ならSPLのArrayObjectを継承して使うのがいいんじゃないかな。
0797nobodyさん2005/12/26(月) 21:37:15ID:???
$a[0] = 1;
$a[1] = 3;
$a[3] = 1;
$a[5] = 1;
$a[6] = 8;
$a[7] = 9;

とある時に、定義されてない$a[2]、$a[4]に空の値("")を入れて、並びもキー順にしたいのですが、今のやり方はまずforeachで回してチェックして定義されてなければ""を入れ
$a[0] = 1;
$a[1] = 3;
$a[3] = 1;
$a[5] = 1;
$a[6] = 8;
$a[7] = 9;
$a[2] = "";
$a[4] = "";
あとからキー順に並びかえてます。
$a[0] = 1;
$a[1] = 3;
$a[2] = "";
$a[3] = 1;
$a[4] = "";
$a[5] = 1;
$a[6] = 8;
$a[7] = 9;
どのキーが定義されてないか、というのと定義済みキーの値は変動します。
どなたかうまいやり方があればご教示願います。
0798nobodyさん2005/12/26(月) 22:03:45ID:???
>>797
キーの抜けチェックはforeachで回すしかないんじゃなかろうか。
そのforeachの書き方自体は何種類かありそうだけど。
キー順並び替えは ksort($a); で一発では?
0799nobodyさん2005/12/26(月) 22:07:36ID:???
foreachで回すのなら最後の並び替えは不要なんじゃないか?
0800nobodyさん2005/12/26(月) 22:13:54ID:???
>>798
そうですかー、並び替えもそれでやってます。一発でぽんとやってくれる関数とか無いかなーと探してまして。

>>799
並びかえないと>>797の二番目の順番のままなのであとの処理に影響が出てしまうので…
0801nobodyさん2005/12/26(月) 22:19:36ID:???
>>797
$max = max(array_keys($a));
for($i = 0; $i <= $max; $i ++) $a0[$i] = (isset($a[$i]))? $a[$i]: "";
$a = $a0;
0802nobodyさん2005/12/26(月) 22:32:25ID:D+i6TPIN
>>794-796
dくす
Objectにする程でもないので2行で我慢します
行数より無駄に変数割り当てるのに抵抗あるんだが
Perl出身ですまそ
■ このスレッドは過去ログ倉庫に格納されています