PHPで配列の渡し方が間違っています。どうやって修正すれば良いですか?

このQ&Aのポイント
  • $arr['opt']などの書き方を変更する方法を教えてください。
  • 配列の要素を引数にする関数OpenWriteの修正方法を教えてください。
  • クーロンファイルに書き込むためのデータを配列から取得する方法を教えてください。
回答を見る
  • ベストアンサー

PHP

PHPでFunctionで配列の渡し方が間違っています。$arr['opt']などの書き方をどうやって変えればいいですか? $arr = array( 'opt' => $_POST['opt'], 'nminute' => $_POST['nminute'], 'nhour' => $_POST['nhour'], 'days' => $days ); function OpenWrite($arr){ /* クーロンのパス */ $path = '/etc/cron.d/auto_pbxrestart'; try{ /* クーロンファイルに書き込む */ $fpt = fopen($path , 'w'); if ($fpt == false) { $message = "このファイルには書き込みできません。<br>\n"; } /* 実際にクーロンに書き込みする(「* *」は月日なので今回は設定対象にならない)*/ $cron_config = $arr['opt'] . $arr['nminute'] . " " . $arr['nhour'] . " * * " .$arr['days'] . " root /usr/local/sbin/auto_pbxrestart.pl"; fwrite($fpt , $cron_config); fclose($fpt); return $message; }catch (Exception $e){ echo "例外処理が発生しました"; } }

  • PHP
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5079/13273)
回答No.1

PHPのプログラムの書き方は正しいように見受けられますが、どのようなエラーが発生しているのですか?

akio123
質問者

お礼

ありがとうございます^_^

その他の回答 (1)

回答No.2

見た感じ、問題ないと思います。 エラー表示はどうなってますか?

関連するQ&A

  • PHP

    OPENファイル(書き込み)をファンクション化したい。どうしたらいいでしょうか? <?php ///////////////////////////////////////////////////////////////////// //定数 ///////////////////////////////////////////////////////////////////// //クーロンのパス $path = '/etc/cron.d/auto_pbxrestart'; ///////////////////////////////////////////////////////////////////// //クーロンの設定の書き込み ///////////////////////////////////////////////////////////////////// if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 曜日を1,2,4,5とカンマをはさむ $selectday = $_POST['day']; foreach($selectday as $day){ $day2=$day2.$day. ","; } // 最後はカンマをはずす $day3 = rtrim($day2, ","); if ($day3 == ""){ $yday3="*"; } // クーロンファイルに書き込む $fpt = fopen($path, 'w'); if ($fpt == false) { print "このファイルには書き込みできません。<br>\n"; } //実際にクーロンに書き込みする(「* *」は月日なので今回は設定対象にならない) fwrite($fpt, $_POST['opt'] .$_POST['nminute']. " " .$_POST['nhour']. " * * " .$day3. " root /usr/local/sbin/auto_pbxrestart.pl"); fclose($fpt);

    • ベストアンサー
    • PHP
  • PHP

    <?php $tmpfname = tempnam("/var/tmp", "auto_pbxrestart"); $cmd = "/usr/bin/sudo chown 777 ".TEMP_PATH; exec($cmd, $output, $return); $cmd = "/usr/bin/sudo chown apache::apache ".TEMP_PATH: exec($cmd, $output, $return); $handle = fopen($tmpfname, "w") if ($handle == false) { $status = '01'; print "debug02err"; } /* 実際にクーロンに書き込みする(「* *」は月日なので今回は設定対象にならない)* $cron_config = $arr['opt'] . $arr['nminute'] . " " . $arr['nhour'] . " * * " .$arr['days'] . " root /usr/local/sbin/auto_pbxrestart.pl"; fwrite($fpt , $cron_config); fclose($fpt); /* テンポラリのクーロンの設定をして本番のクーロンに設定をする */ print "debug04=".$cmd.":".$return."<br>"; $cmd = "/usr/bin/sudo cp -f " . CRON_DAILY_ESTAB . " " . CRON_DAILY_ESTAB . ".bak"; exec($cmd, $output, $return); $cmd = "/usr/bin/sudo cp -f " . TEMP_PATH . " " . CRON_DAILY_ESTAB; exec($cmd, $output, $return); unlink($tmpfname); print "debug05 = ".$cmd.":".$return."<br>"; /* 正常終了 */ ?>

    • ベストアンサー
    • PHP
  • PHP

    PHPで書き込みができません。なぜでしょうか? <?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { $erandayoubi = $_POST['youbi']; foreach($erandayoubi as $youbi){ $youbi2=$youbi2.$youbi. ','; } $youbi3 = rtrim($youbi2, ","); $fp = fopen("/etc/cron.d/autopbxrestart", "w"); fwrite($fp, $_POST['opt'] .$_POST['fun']. " " .$_POST['jikan']. " * * " .$youbi3. " root /usr/local/sbin/auto_pbxrestart.pl"); fclose($fp); } ?>

    • ベストアンサー
    • PHP
  • シェル変数(path)の挙動がわかりません

    シェル変数の挙動がわからなくて困っています。 以下のような3ファイルがあります。 % cat /tmp/test_config.sh #!/opt/local/bin/zsh path=($path /tmp) % cat /tmp/test.sh #!/opt/local/bin/zsh . /tmp/test_config.sh echo $PATH echo $path /tmp/test2.sh % cat /tmp/test2.sh #!/opt/local/bin/zsh echo $PATH echo $path which test.sh これを、所有者のユーザで実行するのとsu -c で実行するので挙動が変わります。 % /tmp/test.sh /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/local/bin:/opt/local/sbin:/tmp /usr/bin /bin /usr/sbin /sbin /usr/local/bin /opt/local/bin /opt/local/sbin /tmp /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/local/bin:/opt/local/sbin:/tmp /usr/bin /bin /usr/sbin /sbin /usr/local/bin /opt/local/bin /opt/local/sbin /tmp /tmp/test.sh % sudo su - hogehoge -c /tmp/test.sh /bin:/usr/bin:/usr/ucb:/usr/local/bin:/tmp /bin /usr/bin /usr/ucb /usr/local/bin /tmp /bin:/usr/bin:/usr/ucb:/usr/local/bin /bin /usr/bin /usr/ucb /usr/local/bin test.sh not found この挙動の違いは、何から産まれるんでしょう? .zshrc でそういう設定ができるんでしょうか? .zshenv は使ってません。 (なお、環境変数$PATHを使えば目的は果たせると言うのはわかっています)

  • PHP

    PHPで下のPHPが読み込まれません。なぜでしょうか? <?php: $result = array(); $path = '/etc/cron.d/autopbxrestart'; $handle = fopen($path, 'r'); while(false !== ($line = fgets($handle))){ list($fun, $jikan, $hi, $tuki,$youbi) = explode(' ', $line); $result{0} = $fun; $result{1} = $jikan; $result{2} = $hi; $result{3} = $tuki; $result[4] = $youbi; echo $result{0}; echo $result{1}; echo $result{2}; echo $result[3]; echo $result[4]; fclose($handle); } ?> <php if ($_SERVER['REQUEST_METHOD'] === 'POST') { $erandayoubi = $_POST['youbi']; foreach($erandayoubi as $youbi){ echo ' '. $youbi. '曜日 '; } echo $_POST['jikan']. "jikan".POST['fun']. "分 実行有無:[".$_POST['opt']. "]を設定しました。"; ?>

    • ベストアンサー
    • PHP
  • DNSのcronデーモンが停止してしまう

    みなさん、こんにちは。 タイトルの質問です。 solarisでDNSサーバとメールサーバを兼用しています。 そのサーバでなぜかcrondがストップしてしましました。 # tail -10 /var/cron/olog ! ******* CRON ABORTED ******** (月) 1月 27 20:46:13 2003 ps -ef | grep cron で cron のプロセス(/usr/sbin/cron)が存在していません。 messages, syslog, dmesg には、 cronに関連したメッセージはありませんでした。 # /etc/rc2.d/S75cron start でもたちあがりません。 # cd /etc/rc3.d # sh -x ./S75cron start + /usr/bin/ps -e + /usr/bin/grep cron + /usr/bin/sed -e s/^ *// -e s/ .*// pid= + [ = ] + /usr/bin/rm -f /etc/cron.d/FIFO + [ -x /usr/sbin/cron ] + /usr/sbin/cron # ps -ef | grep cron root 21364 1 0 23:46:15 ? 0:00 /usr/sbin/cron で立ち上がりました。 外部からの侵入形跡はなく、どうしてクーロンが停止したのか 理由が分かりません。 どなたかお分かりになる方、教えてください。 宜しくお願い致します。

  • PHP+MySQLでの配列のinsert文について

    PHP+MySQLでの配列のinsert文について はじめまして。 POSTされた配列データのDB一括挿入方法で約2週間悩み中で非常に困っております。 私の配列の理解が不足しているため、初心者の私でもわかるように解決方法をご教示いただけましたら大変助かります!何卒、よろしくお願い致します。 行いたい処理といたしまして、 [index.php] CSVアップロード(名前・メアド・金額・年月日の4項目)→※解決しました。  ↓↓↓ [check.php] CSVデータをテーブルで入力されている行数分をループして表示→※解決しました。  ↓↓↓ [finish.php] check.phpで表示した配列データをPOSTで受け取りDBに登録する。→※未解決 となります。 ソースは下記のようになります。 ※index.phpは今回無関係と思うので省略します。 ━━━━ [check.php]ここから ━━━━ ・ ・ ・ <form action="finish.php" method="post"> <? while($arr = fgetcsv_reg($fp,1024)){ ?> <? //空行以外を処理 $num = count($arr); if(!$arr ==''){ // $namae = $arr[0]; //名前 $mail = $arr[1]; //メアド $money = $arr[2]; //金額 $year = $arr[3]; //年 $month_hen = $arr[4]; //月 $month = sprintf("%02d", $month_hen); //1~9月(1桁)の場合、前に0を付加する $day_hen = $arr[5];//日 $day = sprintf("%02d", $day_hen); //1~9日(1桁)の場合、前に0を付加する // ?> <input type="hidden" name="namae[]" value="<?php echo $namae ?>"> <input type="hidden" name="mail[]" value="<?php echo $mail ?>"> <input type="hidden" name="money[]" value="<?php echo $money ?>"> <input type="hidden" name="year[]" value="<?php echo $year ?>"> <input type="hidden" name="month[]" value="<?php echo $month ?>"> <input type="hidden" name="day[]" value="<?php echo $day ?>"> ・ ・ ・ <input type="submit" value="  一括登録する  " /> </form> ━━━━ [check.php]ここまで ━━━━ ━━━━ [finish.php]ここから ━━━━ ・ ・ ・ // DB登録部分開始 if ($_POST['submit']) { $arr = array( 'reg_id', //auto_increment 'user_id', //ユーザーID(セッションで保持) 'namae', //名前 'mail', //メアド 'money',//金額 'ymd'//年月日 ); $value = array( NULL, mysql_real_escape_string( $_SESSION['user_id'] ), mysql_real_escape_string( $_POST['namae'] ), mysql_real_escape_string( $_POST['mail'] ), mysql_real_escape_string( $_POST['money'] ), mysql_real_escape_string( $_POST['year'] . '-' . $_POST['month'] . '-' . $_POST['day'] ) ); // DB登録部分終了 //ループ処理開始 foreach ( $arr as $value ) { $sql = "insert into receipt_issue ( $arr ) values ( $value )"; mysql_query($sql); $result = mysql_query( $sql ) ; //ループ処理終了 } } ・ ・ ・ ━━━━ [finish.php]ここまで ━━━━ というソースなのですが、データベースに登録できません。 例えば「finish.php」内に、 print_r( $_POST['namae'] ); と記述すると、 Array ( [0] => ああ君 [1] => いい君 [2] => うう君 [3] => ええ君 ) とちゃんと配列は受けとれているようです。 そもそもDB接続ができていないということもありません。 ※配列でない場合のテストでちゃんと接続・登録できていました。 いろいろ調べた中で、$value = array内の記述方法に問題があるのか・・・ と思い、色々調べて試したのですがダメでした。。。 上記の仕組みでループさせてデータベースに登録するには、どのように記述したらよろしいでしょうか? 情報に不足がございましたら、申し訳ございません。その点ご指摘いただきましたら必要な情報を再度投稿します。 何卒、お力をお貸しいただけましたら幸いでございます。 宜しくお願い致します!

    • 締切済み
    • PHP
  • PHPについて質問です。

    PHP超初心者です。 初めて変数の変更プログラムを作ってみたのですが、 Warningエラーが出て、一部の機能が有効になりません。 henkou.php ↓↓↓↓ <?php $oldpass = $_POST["oldpass"]; $newpass = $_POST["newpass"]; $newpass2 = $_POST["newpass2"]; ?> <html> <head> <title>変数変更テスト</title> <meta name="robots" content="noindex,nofollow"> </head> <body> <form method="post" action="/henkou.php"> 古いパスワード:<input type="password" name="oldpass"><br> 新しいパスワード:<input type="password" name="newpass"><br> 新しいパスワード:<input type="password" name="newpass2"><br> <input type="submit" value="送信"> </form> <?php require "/conf/config.php"; if ("$oldpass != $password") { echo "パスワードが一致しません"; } else { echo "パスワード変更が完了しました。"; $password_file = file("/conf/config.php"); $password_file = str_reprace ("\"$password\" = \"$newpass\""); SaveFile("/conf/config.php"); } ?> </body> </html> config.php ↓↓↓ <?php $password = ""; // 設定前なので空白です ?> エラーは、 Fatal error: require() [function.require]: Failed opening required '/conf/config.php' (include_path='.:/usr/local/lib/php') in /home/***.net/henkou.php on line 21 と、 Warning: require(/conf/config.php) [function.require]: failed to open stream: No such file or directory in /home/***.net/henkou.php on line 21 ここからが本題ですが、 上のプログラムが正しいかどうか、確認していただきたいのです。 また、間違えている部分があったら、ご指導いただければと思います。 どなたか、手助けをお願いします!

    • ベストアンサー
    • PHP
  • cronでPHP実行

    お世話になります。 OSはクライアントの為、恐縮ながら何を使用しているか不明となっております。 PHPバージョンは5.1.6です。 cronを使用して、毎日特定の時間に、メールを配信するPHPスクリプトを実行しようと試みているのですが、エラーメールが返ってきてしまいます。 因みに、URLを直接指定して実行した場合は正常にメールが配信されます。 設定方法は、crontab -e で 0 12 * * * /usr/lib/php -q /home/hoge/public_html/mail.php と記述しております。 返ってくるエラーメールの内容は、以下の通りです。 Content-Type: text/plain; charset=UTF-8 Auto-Submitted: auto-generated X-Cron-Env: <SHELL=/bin/sh> X-Cron-Env: <HOME=/home/hoge> X-Cron-Env: <PATH=/usr/bin:/bin> X-Cron-Env: <LOGNAME=hoge> X-Cron-Env: <USER=hoge> Message-Id: <xxxxxx@xxxxxxxxxx> Date: Sun, 28 Sep 2008 12:00:01 +0900 (JST) /bin/sh: /home/hoge/public_html/mail.php: Permission denied 以上、対策方法についてご存知の方がおられましたら、ご教授よろしくお願い致します。

  • PHPのチャットアプリでの受信音について

    下記のPHPスクリプトにおいて、左蘭で、氏名とメッセージを入力後、右蘭の メッセージ部分にメッセージが表示されるという仕組みなのですが、自分自身 が書いたメッセージのときにしか音が鳴りません。 本来、他のデバイスで書き込んだ時の受信音が自パソコンで鳴ればいいのですが。 どうすればよいのか教えていただきたいです。 ちなみに、$_SERVER['REMOTE_ADDR'] でIPによる振り分けも行ったのですが、 だめでした。(自パソコンから投稿したときしか音が鳴りませんでした。) ////////////////////////// // ファイルへの書き込み // ////////////////////////// function writeToLogFile($val){ $filename="log.txt"; date_default_timezone_set("Japan"); $date = date('H:i:s'); echo '<audio src="./music/buble.wav" volume="1" autoplay></audio>'; echo '<bgsound src="./music/buble.wav" loop="1" volume="1">'; if($val===1){ // 初回投稿時で、しかも名前とメッセージがある場合(ログファイルが0バイトの場合) $fp = fopen($filename, 'w'); // $log = $_POST['ip_addr']." ".$date." ".$_POST['name']." : ".$_POST['message']; $log = $date." ".$_POST['name']." : ".$_POST['message']; $buf = $log.",\n"; fwrite($fp, $buf); fclose($fp); } elseif($val===2){ // 既に投稿があって、しかも名前とメッセージがある場合(ログファイルのサイズが0バイトでない場合) $fp = fopen($filename, 'a'); $log = $date." ".$_POST['name']." : ".$_POST['message']; $buf = $log.",\n"; fwrite($fp, $buf); fclose($fp); }else{ return; } }

    • 締切済み
    • PHP

専門家に質問してみよう