【PHP】ID出さんでも質問OKなスレ【初心者歓迎】2
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/09/10(木) 22:52:33ID:???PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
姉妹スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 80
http://pc11.2ch.net/test/read.cgi/php/1233479457/
0175nobodyさん
2009/09/23(水) 16:37:42ID:???0176nobodyさん
2009/09/23(水) 16:42:04ID:???class myClass {
function setValue( $set)
{
$foo = &PEAR::getStaticProperty('myClass', "foo");
$foo = $set;
}
function view()
{
print PEAR::getStaticProperty('myClass', "foo");
}
}
myClass::setValue('value = foo');
myClass::view();
0177nobodyさん
2009/09/23(水) 17:36:20ID:???あっ、ほんとですね
メソッドの場合は意味が違うのですか?
失礼ですが、意味の違いが分かりません
>>176
すみません、初心者なのでいまいち分からなかったのですが、文をそのまま実行したら、
3行目がParse error: syntax error, unexpected T_STRING, expecting T_FUNCTION in C:\Program Filesとなりました
>>176のコードは、まずmyClassというクラスを定義し、中身はsetValueとviewという2つの関数を内包
setValue関数はまずmyClassというクラスからfooという変数を取得、次にsetValue関数の引数$setを$fooに代入
view関数はそのままprint()
で、メソッド呼び出しという考えでいいのでしょうか?
('value = foo')は$setにfooを代入
で、上の方でも書いている問題点なのですが、自分がこうじゃないのかなぁと思ったのは、
$foo = &の文でコピーした変数fooと$foo = の下の文は独立して・・・ってアレ?
どっちとも同じ式に・・・???
ごめんなさい、やっぱ分かりません
0178nobodyさん
2009/09/23(水) 18:05:26ID:???getStaticPropertyが返してるのは参照なので、 'myClass'と"foo"という文字列で参照できるようにした変数の参照を返してるんだと
思います。 実際どうなってるのかは知らないけど、たとえば
$foo = &$proparty["myClass"]["foo"]; みたいな感じで。
なので、 $foo = $set; は
$proparty["myClass"]["foo"] = $set; をしてることになりますよね。
0179nobodyさん
2009/09/23(水) 18:07:13ID:???0180164
2009/09/23(水) 18:16:35ID:???$optionsという変数がオーバーライドされているわけではなく、
PEAR::getStaticProperty('DB_DataObject','options') = $config['DB_DataObject']
と代入しているという事でしょうか?
となると変数$optionsというものは意味が無く、形だけのものだという事なのでしょうか?
それがメソッド時の「&」の意味だと言うのならば分かります
>>176の例では
PEAR::getStaticProperty('myClass', "foo") = $setという意味で、PEAR::getStaticProperty('myClass', "foo")がオーバーライドされて消えたのではないと言う意味になるのですね
0181nobodyさん
2009/09/23(水) 18:31:13ID:???0182nobodyさん
2009/09/23(水) 18:39:17ID:???ソースのコメントに、
// おまじない
だの
// ↓消すと何故か動かなくなる
だのが書かれてるコードはたまに上がってくるしな。
0183nobodyさん
2009/09/23(水) 20:53:59ID:???たとえば、
2009/09/23
って入れたら、
「その日は水曜日」
ってわかる?
0184nobodyさん
2009/09/23(水) 21:03:36ID:???0186nobodyさん
2009/09/23(水) 21:08:23ID:???0187nobodyさん
2009/09/23(水) 21:16:22ID:???0188nobodyさん
2009/09/23(水) 22:18:05ID:???0189nobodyさん
2009/09/23(水) 23:05:30ID:???一個づつ取ってきて、
画面に表示する、
ってプログラム、
forとforeachではできたんだけど、
こんどwhileでやってみるかな?って思ったんだけど、
どうやって組むかな?
0190nobodyさん
2009/09/23(水) 23:06:28ID:???$banban[] = "HTML";
$banban[] = "XHTML";
$banban[] = "XML";
$banban[] = "CSS";
for($i=0;$i<=3;$i++){
print $banban[$i] . "<br>";
}
?>
-------------------------------------
↑これがforのバージョン。
0191nobodyさん
2009/09/23(水) 23:07:15ID:???$banban[] = "HTML";
$banban[] = "XHTML";
$banban[] = "XML";
$banban[] = "CSS";
$banban[] = "PHP";
foreach($banban as $aaa){
print $aaa;
print "<br>";
}
?>
------------------------------------------
↑これがforeachのバージョン。
0192nobodyさん
2009/09/23(水) 23:14:21ID:???0193nobodyさん
2009/09/23(水) 23:32:42ID:???0194nobodyさん
2009/09/24(木) 00:18:42ID:???<?php
$banban[] = "HTML";
$banban[] = "XHTML";
$banban[] = "XML";
$banban[] = "CSS";
for($i=0;$i<array_count_values($banban);$i++){
print $banban[$i] . "<br>";
}
?>
0195nobodyさん
2009/09/24(木) 00:26:16ID:???$banban[] = "HTML";
$banban[] = "XHTML";
$banban[] = "XML";
$banban[] = "CSS";
array_walk($banban, create_function( '$v','print $v."<br>";' ));
?>
0196nobodyさん
2009/09/24(木) 00:37:53ID:???while ($val = each($banban)) {
print $val[1] . "<br>";
}
0197nobodyさん
2009/09/24(木) 09:14:12ID:???読んでいて自分も疑問に思ったので調べてみたのですが、>>176のような『&』の事を何と呼ぶのでしょうか?
ネットで調べても、&だけでは色々とあって自分では辿り着きませんでした
何か、何とか演算子とか名前があると調べやすいと思ったものですから
0198nobodyさん
2009/09/24(木) 09:32:16ID:???0199nobodyさん
2009/09/24(木) 11:46:01ID:???0200nobodyさん
2009/09/24(木) 11:47:06ID:???0201nobodyさん
2009/09/24(木) 12:17:44ID:???0202nobodyさん
2009/09/24(木) 12:19:14ID:???あるじゃん
0203nobodyさん
2009/09/24(木) 15:48:25ID:???や本でphp.iniの中で、include_path=".;c:/php/includes;"とありますが、自分のPHPフォルダ内にはincludesというフォルダもファイルも存在していません
で、上記のようにphp.iniを設定していますが、意味が無いように思えます
コレは自分で勝手にincludesというフォルダを作ればいいのでしょうか?
それとも、その中に何か必要な(or重要な)ファイルとか入っているのでしょうか?
どうすればいいのでしょうか?
0204203
2009/09/24(木) 15:50:47ID:???0205nobodyさん
2009/09/24(木) 15:53:46ID:???インクルードパスっていうのは、php本体ではなく、phpの拡張パーツが入るディレクトリの場所。
なので拡張パーツが特になければ、 include ディレクトリはなくていい。
必要になったら、設定ファイルのその箇所に書いたディレクトリを作ればいい。
0206nobodyさん
2009/09/25(金) 00:54:56ID:???PHP経験者になりたいのですが
どんなwebアプリケーションを作れば
PHP経験者として採用されるレベルになれますか?
0207nobodyさん
2009/09/25(金) 01:02:08ID:???たぶん、経験者を募集している企業の本音は、
「業務で携わったことがある」ことが条件だと思う。
とりあえず、
・サイト画面から入力ができる
・データベースと連携できる
・W3Cチェックを通るHTMLでそれらができる
・環境を作れる(PHPやDBの設定など)
というところは押さえておいたほうがいいかも
0208nobodyさん
2009/09/25(金) 01:02:18ID:???0212nobodyさん
2009/09/25(金) 09:56:56ID:???批判というより初心者の回答者を正してるだけなのにな
求人での経験ってのは業務で作業したことがある経験の事で趣味での経験ではない
>>207が書いてあるのは経験ではなくてただのスキル
0213nobodyさん
2009/09/25(金) 10:03:27ID:???そうじゃないところはわざわざ経験者とは書かないで、
初心者歓迎や独学でやってる人歓迎みたいな風に書いてあるでしょ。
経験者になりたいのならアルバイトでも経験者になるので、
初心者でアルバイト募集してるとこで下積みするといいよ。
もしかしたらそこから正社員登用されるかもしれないし。
0214nobodyさん
2009/09/25(金) 10:14:56ID:???0215nobodyさん
2009/09/25(金) 10:16:17ID:???0218nobodyさん
2009/09/25(金) 12:35:09ID:???WEBゲームとか
ブラウザゲームとか作ってみれば?
あれは基本が全部つまっている。
0219nobodyさん
2009/09/25(金) 14:57:24ID:???数百のディレクトリ名を法則にそって変更しないといけないので、手作業でやるにはちょっと時間がかかるので・・・。
0220nobodyさん
2009/09/25(金) 15:05:23ID:???やったことないから知らないけど
http://jp.php.net/manual/ja/ref.filesystem.php
この中に該当する関数がなさそうなら
exec関数とかを使ってコマンドで操作するしかないんじゃないかな
0221nobodyさん
2009/09/25(金) 15:34:35ID:???0222nobodyさん
2009/09/25(金) 17:18:49ID:JtFu9Epkwhile( $file_name = readdir( $dir_file ) ){
echo "$file_name";
}
closedir( $dir_file );
とやっても何も表示されないんですが何か間違ってますか?
0224222
2009/09/25(金) 17:28:40ID:JtFu9Epkすいません。
ttp://php.benscom.com/manual/ja/function.readdir.php
ですかね。
試しにコピペで
if ($handle = opendir('.')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
echo "$file\n";
}
}
closedir($handle);
貼り付けてみましたが何も表示されませんでした。
0225nobodyさん
2009/09/25(金) 17:30:18ID:???0226222
2009/09/25(金) 17:41:49ID:JtFu9Epkopendir.php <- このファイルに224のスクリプトを書いてます
index.php
test.php
up.php
こんな感じで10個ほどあります。一応権限も777にしてみましたがダメでした。
0227nobodyさん
2009/09/25(金) 17:50:19ID:???0228226
2009/09/25(金) 18:10:44ID:JtFu9Epkすいません。
特に何もしてないのでエラー表示の設定などはしてないです。
どのようにすれば出るようになるのでしょうか・・・
0229nobodyさん
2009/09/25(金) 18:15:40ID:???0230nobodyさん
2009/09/25(金) 18:18:23ID:???0231226
2009/09/25(金) 18:29:18ID:JtFu9Epk試しに
echo "1hoge";
if ($handle = opendir('.')) {
echo "2hoge";
while (false !== ($file = readdir($handle))) {
echo "3hoge";
echo "$file\n";
}
echo "4hoge";
closedir($handle);
}
echo "5hoge";
こういうの書いてみたら1hogeと5hogeのみ表示されました・・・
>>230
php.iniのsafe_modeですよね?Offとなっておりました。
ますます意味が分からない・・・
0232nobodyさん
2009/09/25(金) 18:35:16ID:???>path が有効なディレクトリでないかまたは権限が 制限されているかファイルシステムのエラーによりディレクトリが
>オープンできない場合、opendir() は FALSE を返し、 E_WARNING エラーが発行されます。 opendir()
>のこのエラー出力は、 関数名の前に '@' を付けることにより抑制できます。
カレントディレクトリがオープンできない理由てのは俺には分からん。
warningエラー出てるんじゃないの?
var_dump(ini_get('display_errors'));
var_dump(ini_get('error_reporting'));
を実行した際の結果は?
0233nobodyさん
2009/09/25(金) 18:45:08ID:???SQLで検索ワード見つからない場合にnot foundを表示する事自体は分かったので
すが、
それ以降のHTMLの表記を中止する事は可能ですか?
<?php
if ( ○○==0 ) {
echo "not found";
}
?>
<font>TEST</font>
これ以降下にズラ〜〜っとHTMLが続くのですが、それを途中で止めて
not foundだけをページに表示するにはどうすれば良いでしょうか。
0234nobodyさん
2009/09/25(金) 18:47:16ID:???0235226
2009/09/25(金) 18:47:21ID:JtFu9Epk馬鹿な勘違いしててすいませんでした。
実行した結果は
tring(0) "" string(4) "2047"
となっておりました。
0237nobodyさん
2009/09/25(金) 18:48:53ID:???<?php
if ( ○○==0 ) {
echo "not found";
} else {
?>
<font>TEST</font>
ズラ〜〜っと
<?
}
?>
</html>
0238nobodyさん
2009/09/25(金) 18:52:04ID:???display_errorsが0ってことはエラーが表示されてない設定になってると思うお
php.iniを書き換えればいいお
0239226
2009/09/25(金) 19:08:16ID:JtFu9Epkくだらない質問につきあっていただきありがとうございます。
php.iniを
display_errors = On
error_reporting = E_ALL & ~E_NOTICE
に変更してみましたが、変化は見られませんでした。
変更するところ間違ってるのかな。よく分からなくなってきた。
0242226
2009/09/25(金) 19:32:14ID:JtFu9Epk2回ほど再起動しました。
う〜ん・・・
0243226
2009/09/25(金) 19:34:04ID:JtFu9Epkすいません。
一応サーバごと再起動してみたらうまいこといきました。
ログを見るとどうやらapache様が挙動不審になってたようです。
設定を修正して見れるようになりました。
Webは普通に動いてたのでピンポイントでおかしくなってたようです。
こんなくだらない事にながながとつきあっていただき本当にありがとうございました。
0244sage
2009/09/25(金) 20:36:02ID:???date("Ymd H:i:s.", filemtime($file))
をwihleで回して更新日を取得する事が出来るようにはなったのですが
これをどのようにすればよいのでしょうか?
ヒントをいただけないでしょうか
0245nobodyさん
2009/09/25(金) 20:38:26ID:???その差が、削除したい差以上であれば、削除
てな感じでよくない?
0246nobodyさん
2009/09/25(金) 20:40:26ID:???更新日って一度そのファイルが作成されたら更新はもうされないの?
とりあえず3ヶ月更新なかったものを削除とすると
取得した更新日と現在日時の差で90日分あいていたら
そのファイルにたいしてunlinkかけるとかでいいんでない?
0247sage
2009/09/25(金) 20:43:14ID:???残りの2個は削除したいという意味です。
説明不足申し訳ない。
0248nobodyさん
2009/09/25(金) 20:44:07ID:???てな感じでよくない?
0250sage
2009/09/25(金) 21:18:20ID:???while (false !== ($file = readdir($dir))) {
$filetaime[] = date("Ymd H:i:s.", filemtime($file));
$filetime[] = sort($filetime);
unlink($file[$i]);
というのを思いついたのですが、ファイル名と時間が連動してないですね。
きっとアホなことしてると思われてるんでしょうけど、複数の変数を連動させるような事はできますか?
0251nobodyさん
2009/09/25(金) 21:26:04ID:???0252249
2009/09/25(金) 21:41:52ID:???touch($new_file); //新しいファイルを作成する
file_put_contents("log.txt", $new_file."\n", FILE_APPEND | LOCK_EX); //新しいファイル名をログファイル(log.txt)に追記
$list = file("log.txt"); //ログを配列に読む
$tmp_log = ""; //新しいログ
for ($i = count($list) - 1; $i >= 0; $i--) { //後ろから回す
if ($i > 5) {
unlink($list[$i]); //ファイル削除
} else {
$tmp_log .= $list[$i]."\n";
}
}
file_put_contents("log.txt", $tmp_log, LOCK_EX);
動作確認もしてないし細かいとこが違ってるかもしれんけど
イメージとしてはこんなかんじのことをいった
0253252
2009/09/25(金) 21:48:57ID:???眠くて頭が回らない・・・
0254nobodyさん
2009/09/25(金) 21:49:56ID:???252は忘れてちょうだい・・・
0255nobodyさん
2009/09/25(金) 23:10:04ID:???0-0000-0001-2 ガリの穴 25,000円 山田のおばさん
コレをあなたのデータベースに登録してみて下さい
0256nobodyさん
2009/09/25(金) 23:22:36ID:???0257nobodyさん
2009/09/25(金) 23:26:38ID:xPOnPJfWfopenしてLOCK_EXしてfputsで書いてLOCK_UNしてfloseしてるんだけど
やっぱりfile_put_contents1行で書いたほうがいいものなんかね?
0258nobodyさん
2009/09/25(金) 23:45:05ID:???0261sage
2009/09/26(土) 00:07:25ID:???file_put_contentsでもパイプでLOCK_EXすればいいんじゃないの?
file_put_contents($file, "hogehoge", FILE_APPEND | LOCK_EX);
こんな感じ。
0262nobodyさん
2009/09/26(土) 00:21:08ID:???0263sage
2009/09/26(土) 00:24:43ID:???0264nobodyさん
2009/09/26(土) 00:39:16ID:???> FILE_APPEND | LOCK_EX
これは有効なのか?
マニュアルを見ると、
フラグを組み合わせる際には、論理 OR (|) 演算子で連結します。
FILE_APPENDはLOCK_EX と同時には使用できません。
と読めるのだが...。
「追記はアトミックに行われるためロックは不要」とあるので、
FILE_APPENDの指定だけでログ追記するのに問題はなさそうではあるが。
0265sage
2009/09/26(土) 00:50:03ID:???0266nobodyさん
2009/09/26(土) 01:35:35ID:???アトミック(=不可分の)とあるので、一連の操作が邪魔されることがないということなんだろうね。
マニュアルを信じるならば。
古い版のマニュアルでは、
file_put_contents($file, $person, FILE_APPEND | LOCK_EX);
という例が載っているが、
http://bugs.php.net/bug.php?id=49329
で修正されたようだ。
0267sage
2009/09/26(土) 01:40:05ID:???file_put_contentsの1行で済むというわけか。
0268nobodyさん
2009/09/26(土) 01:42:11ID:???0269nobodyさん
2009/09/26(土) 05:54:34ID:???0270nobodyさん
2009/09/26(土) 17:49:56ID:???配列ってシングルクオート入れないと、
正式にはダメみたいだね。
0271nobodyさん
2009/09/26(土) 18:27:03ID:???正式?
0272nobodyさん
2009/09/26(土) 18:36:08ID:???0274nobodyさん
2009/09/26(土) 19:13:58ID:???■ このスレッドは過去ログ倉庫に格納されています